SELECT(2)                        System Calls                        SELECT(2)




NAME

       select - synchronous I/O multiplexing


SYNOPSIS

       #include <sys/types.h>
       #include <sys/time.h>
       #include <unistd.h>

       int  select  (int  nfds, fd_set *readfds, fd_set *writefds, fd_set *ex
       ceptfds, 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);


DESCRIPTION

       Select examines the I/O descriptor sets whose addresses are  passed  in
       readfds,  writefds,  and  exceptfds to see if some of their descriptors
       are ready for reading, are ready for writing, or  have  an  exceptional
       condition  pending,  respectively.   The  first  nfds  descriptors  are
       checked in each set; i.e., the descriptors from 0 through (nfds) in the
       descriptor sets are examined.  On return, select replaces the given de‐
       scriptor sets with subsets consisting of  those  descriptors  that  are
       ready  for the requested operation.  Select returns the total number of
       ready descriptors in all the sets.

       The descriptor sets are stored as bit fields  in  arrays  of  integers.
       The  following  macros  are  provided  for manipulating such descriptor
       sets: FD_ZERO(&fdsetx) initializes a descriptor set fdset to  the  null
       set.   FD_SET(fd, &fdset) includes a particular descriptor fd in fdset.
       FD_CLR(fd, &fdset) removes fd from fdset.  FD_ISSET(fd, &fdset) is non-
       zero if fd is a member of fdset, zero otherwise.  The behavior of these
       macros is undefined if a descriptor value is less than zero or  greater
       than  or  equal  to FD_SETSIZE, which is normally at least equal to the
       maximum number of descriptors supported by the system.

       If timeout is a non-NULL pointer, it specifies a  maximum  interval  to
       wait  for the selection to complete.  If timeout is a NULL pointer, the
       select blocks indefinitely.  To affect a  poll,  the  timeout  argument
       should be non-NULL, pointing to a zero-valued timeval structure.

       Any  of  readfds, writefds, and exceptfds may be given as NULL pointers
       if no descriptors are of interest.


RETURN VALUES

       Select returns the number of ready descriptors that  are  contained  in
       the descriptor sets, or -1 if an error occurred.  If the time limit ex‐
       pires, select returns 0.  If select returns with  an  error,  including
       one due to an interrupted call, the descriptor sets will be unmodified.


ERRORS

       An error return from select indicates:

              EBADF  One  of the descriptor sets specified an invalid descrip‐
                     tor.

              EINTR  A signal was delivered before the time limit expired  and
                     before any of the selected events occurred.

              EINVAL The  specified  time limit is invalid.  One of its compo‐
                     nents is negative or too large.


SEE ALSO

       accept(2),  connect(2),  getdtablesize(2),  gettimeofday(2),   read(2),
       recv(2), send(2), write(2), clocks(7)


BUGS

       Although  the  provision of getdtablesize(2) was intended to allow user
       programs to be written independent of the kernel limit on the number of
       open  files, the dimension of a sufficiently large bit field for select
       remains a problem.  The default size FD_SETSIZE (currently 32 for  GNO)
       is  somewhat larger than the current kernel limit to the number of open
       files.  Unlike BSD systems, under GNO it is not possible for  sites  to
       reconfigure this limit since it requires recompilation of the kernel.

       Select  should  probably  return  the  time remaining from the original
       timeout, if any, by modifying the time value in place.  This may be im‐
       plemented  in future versions of the system.  Thus, it is unwise to as‐
       sume that the timeout value will be unmodified by the select call.


HISTORY

       The select function call appeared in 4.2BSD.  The first  appearance  in
       GNO was in v2.0.5.



GNO                             15 January 1997                      SELECT(2)

Man(1) output converted with man2html