NAME
select - Synchronous I/O multiplexing
SYNOPSIS
#include<sys/types.h>
#include<sys/time.h>
int select(
int nfds,
fd_set *readfds,
fd_set *writefds,
fd_set *exceptfds,
struct timeval *timeout) ;
FD_SET(
int fd,
fd_set *fdset );
FD_CLR(
int fd,
fd_set *fdset );
FD_ISSET(
int fd,
fd_set *fdset );
FD_ZERO(
fd_set *fdset );
PARAMETERS
nfds Specifies the number of open objects that may be ready
for reading or writing or that have exceptions pending.
The nfds parameter cannot be greater than FD_SETSIZE.
readfds
Points to an I/O descriptor set consisting of file
descriptors of objects opened for reading. When the
readfds parameter is a null pointer, the read I/O
descriptor set is ignored by the select() function.
writefds
Points to an I/O descriptor set consisting of file
descriptors for objects opened for writing. When the
writefds parameter is a null pointer, the write I/O
descriptor set is ignored.
exceptfds
Points to an I/O descriptor set consisting of file
descriptors for objects opened for reading or writing
that have an exception pending. When the exceptfds
parameter is a null pointer, the exception I/O
descriptor set is ignored.
timeout
Points to a type timeval structure that specifies the
time to wait for a response to a select() function.
When the timeout parameter has a nonzero value, the
maximum time interval to wait for the select() function
to complete is specified by values stored in space
reserved by the type timeval structure pointed to by
the timeout parameter.
When the timeout parameter is a null pointer, the
select() function blocks indefinitely. To poll, the
timeout parameter should be specified as a nonzero
value and point to a zero-valued timeval structure.
fd Specifies a file descriptor.
fdset
Points to an I/O descriptor set.
DESCRIPTION
The select() function checks the status of objects identi-
fied by bit masks called I/O descriptor sets. Each I/O
descriptor set consists of an array of bits whose relative
position and state represent a file descriptor and the
status of its corresponding object. There is an I/O descrip-
tor set for reading, writing, and for pending exceptions.
These I/O descriptor sets are pointed to by the readfds,
writefds, and exceptfds parameters, respectively. The I/O
descriptor sets provide a means of monitoring the read,
write, and exception status of objects represented by file
descriptors.
The status of nfds - 1 file descriptors in each referenced
I/O descriptor set is checked when theselect() function is
called. The select() function returns a modified I/O
descriptor set, which has the following characteristics: for
any selected I/O descriptor set pointed to by the readfds,
writefds, and exceptfds parameters, if the state of any bit
corresponding with an active file descriptor is set on
entry, when the object represented by the set bit is ready
for reading, writing, or its exception condition has been
satisfied, a corresponding bit position is also set in the
returned I/O descriptor set pointed to by the readfds, wri-
tefds, or exceptfds parameters.
On return, the select() function replaces the original I/O
descriptor sets with the corresponding I/O descriptor sets
that have a set bit for each file descriptor representing
those objects that are ready for the requested operation.
The total number of ready objects represented by set bits in
all the I/O descriptor sets is returned by the select()
function.
After an I/O descriptor set is created, it may be modified
with the following macros:
FD_ZERO(&fdset) Initializes the I/O descriptor set addressed
by fdset to a null value.
FD_SET(fd, &fdset) Includes the particular I/O descriptor bit
specified by fd in the I/O descriptor set
addressed by fdset.
FD_CLR(fd, &fdset) Clears the I/O descriptor bit specified by
file descriptor fd in the I/O descriptor set
addressed by fdset.
FD_ISSET(fd, &fdset) Returns a nonzero value when the I/O descrip-
tor bit for fd is included in the I/O
descriptor set addressed by fdset. Otherwise
0 (zero) is returned.
The behavior of these macros is undefined when parameter fd
has a value less than 0 (zero) or greater than or equal to
FD_SETSIZE, which is normally at least equal to the maximum
number of file descriptors supported by the system.
NOTES
Although the getdtablesize() function is intended to allow
users to write programs independently of the kernel limit on
the number of open files, the dimensioning of a sufficiently
large bit field for select() remains a problem. The
default size FD_SETSIZE (currently 256) is larger than the
current kernel limit on the permitted number of open files.
To accommodate programs that specify more open files with
the select() function, it is possible to specify an alter-
nate value for FD_SETSIZE before including the sys/types.h
header file.
RETURN VALUES
Upon successful completion, the select() function returns
the number of ready objects represented by corresponding
file descriptor bits in the I/O descriptor sets. When an
error occurs, -1 is returned. When the time limit specified
by values pointed to by the timeout parameter expires, this
function returns the value 0 (zero).
When select() returns an error, including a process inter-
rupt, the I/O descriptor sets pointed to by the readfds,
writefds, and exceptfds parameters remain unmodified.
ERRORS
If the select() function fails, errno may be set to one of
the following values:
[EBADF] One of the I/O descriptor sets you specified
is invalid.
[EINTR] A signal was delivered before the time limit
specified by the timeout parameter expired
and before any of the selected events
occurred.
[EINVAL] The time limit specified by the timeout
parameter is invalid. One of its components
is negative or too large.
RELATED INFORMATION
Functions: accept(2), connect(2), send(2), getdtablesize(2),
poll(2) read(2), recv(2), write(2)
Acknowledgement and Disclaimer