pub unsafe fn select(
    nfds: i32,
    readfds: Option<&mut [FdSetElement]>,
    writefds: Option<&mut [FdSetElement]>,
    exceptfds: Option<&mut [FdSetElement]>,
    timeout: Option<&Timespec>,
) -> Result<i32>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.
If an unsupported timeout is passed, this function fails with
io::Errno::INVAL.
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 all the sets must correspond to open file descriptors.