select(2)
NAME
select − synchronous i/o multiplexing
SYNTAX
#include <sys/time.h>
nfound = select(nfds, readfds, writefds, execptfds, timeout)
int nfound, nfds, *readfds, *writefds, *execptfds;
struct timeval *timeout;
DESCRIPTION
The select system call examines the I/O descriptors specified by the bit masks readfds, writefds, and execptfds to see if they are ready for reading, writing, or have an exceptional condition pending, respectively. The I/O descriptors can be pointers to arrays of integers if multiple fd’s are required to be selected. File descriptor f is represented by the bit “1<<f” in the mask. The nfds descriptors are checked, that is the bits from 0 through nfds-1 in the masks are examined. The select system call returns, in place, a mask of those descriptors which are ready. The total number of ready descriptors is returned in nfound.
If timeout is a non-zero pointer, it specifies a maximum interval to wait for the selection to complete. If timeout is a zero pointer, the select blocks indefinitely. To affect a poll, the timeout argument should be non-zero, pointing to a zero valued timeval structure.
Any of readfds, writefds, and execptfds may be given as 0 if no descriptors are of interest.
The select system call returns the number of descriptors which are contained in the bit masks, or −1 if an error occurred. If the time limit expires then select returns 0.
A socket exception is not defined and therefore execptfds always returns a 0.
RESTRICTIONS
The descriptor masks are always modified on return, even if the call returns as the result of the timeout.
DIAGNOSTICS
An error return from select indicates:
[EBADF] One of the bit masks specified an invalid descriptor.
[EINTR] A signal was delivered before the time limit expired and before any of the selected events occurred.
[EINVAL] The specified time limit is unacceptable. One of its components is negative or too large.