Почему необходимо выполнить два приведения к изменяемому необработанному указателю подряд?
При взгляде наunix-socket
Я наткнулся на этот код:
let timeout = unsafe {
let mut timeout: libc::timeval = mem::zeroed();
let mut size = mem::size_of::<libc::timeval>() as libc::socklen_t;
try!(cvt(libc::getsockopt(self.0,
libc::SOL_SOCKET,
kind,
&mut timeout as *mut _ as *mut _,
&mut size as *mut _ as *mut _)));
timeout
};
Мне было интересно, в частности, эти строки:
&mut timeout as *mut _ as *mut _,
&mut size as *mut _ as *mut _
Почему необходимо выполнить два приведения к изменяемому необработанному указателю подряд? Почему этого было бы недостаточно, чтобы разыграть только один раз?