Function select

Source
pub unsafe fn select(
    nfds: i32,
    readfds: Option<&mut [FdSetElement]>,
    writefds: Option<&mut [FdSetElement]>,
    exceptfds: Option<&mut [FdSetElement]>,
    timeout: Option<&Timespec>,
) -> Result<i32>
Available on crate feature event only.
Expand description

select(nfds, readfds, writefds, exceptfds, timeout)—Wait for events on sets of file descriptors.

readfds, writefds, exceptfds must point to arrays of FdSetElement containing at least nfds.div_ceil(size_of::<FdSetElement>()) elements.

This select wrapper differs from POSIX in that nfds is not limited to FD_SETSIZE. Instead of using the fixed-sized fd_set type, this function takes raw pointers to arrays of fd_set_num_elements(max_fd + 1, num_fds), where max_fd is the maximum value of any fd that will be inserted into the set, and num_fds is the maximum number of fds that will be inserted into the set.

In particular, on Apple platforms, this function behaves as if _DARWIN_UNLIMITED_SELECT were predefined.

On illumos, this function is not defined because the select function on this platform always has an FD_SETSIZE limitation, following POSIX. This platform’s documentation recommends using poll instead.

fd_set_insert, fd_set_remove, and FdSetIter are provided for setting, clearing, and iterating with sets.

§Safety

All fds in in all the sets must correspond to open file descriptors.

§References