diff --git a/src/sys/select.rs b/src/sys/select.rs index 9d7c41f8b8..1b47d759a9 100644 --- a/src/sys/select.rs +++ b/src/sys/select.rs @@ -17,6 +17,7 @@ const BITS: usize = 32; #[cfg(not(any(target_os = "macos", target_os = "ios")))] #[repr(C)] +#[derive(Clone)] pub struct FdSet { bits: [u64; FD_SETSIZE as usize / 64] } @@ -71,11 +72,11 @@ pub fn select(nfds: c_int, readfds: Option<&mut FdSet>, writefds: Option<&mut FdSet>, errorfds: Option<&mut FdSet>, - timeout: &mut TimeVal) -> Result { + timeout: Option<&mut TimeVal>) -> Result { let readfds = readfds.map(|set| set as *mut FdSet).unwrap_or(null_mut()); let writefds = writefds.map(|set| set as *mut FdSet).unwrap_or(null_mut()); let errorfds = errorfds.map(|set| set as *mut FdSet).unwrap_or(null_mut()); - let timeout = timeout as *mut TimeVal; + let timeout = timeout.map(|tv| tv as *mut TimeVal).unwrap_or(null_mut()); let res = unsafe { ffi::select(nfds, readfds, writefds, errorfds, timeout) diff --git a/test/sys/test_select.rs b/test/sys/test_select.rs index 74b390f903..689086700f 100644 --- a/test/sys/test_select.rs +++ b/test/sys/test_select.rs @@ -46,7 +46,7 @@ fn test_select() { Some(&mut fd_set), None, None, - &mut timeout).unwrap()); + Some(&mut timeout)).unwrap()); assert!(fd_set.contains(r1)); assert!(!fd_set.contains(r2)); }