Museum

Home

Lab Overview

Retrotechnology Articles

⇒ Online Manual

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

accept(3N)

connect(3N)

read(2)

write(2)

recv(3N)

send(3N)

getdtablesize(3)



select(3N)              LIBRARY FUNCTIONS              select(3N)



NAME
     select - synchronous I/O multiplexing

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

     nfound = select(nfds, readfds, writefds, exceptfds, timeout)
     int nfound, nfds;
     fd_set *readfds, *writefds, *exceptfds;
     struct timeval *timeout;

     FD_SET(fd, &fdset)
     FD_CLR(fd, &fdset)
     FD_ISSET(fd, &fdset)
     FD_ZERO(&fdset)
     int fd;
     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 writ-
     ing, or have an exceptional condition pending, respectively.
     The first nfds descriptors are checked in each set; i.e. the
     descriptors from 0 through nfds-1 in the descriptor sets are
     examined.  On return, select replaces the  given  descriptor
     sets  with  subsets consisting of those descriptors that are
     ready for the requested  operation.   The  total  number  of
     ready descriptors in all the sets is returned in nfound.

     The descriptor sets are stored as bit fields  in  arrays  of
     integers.   The following macros are provided for manipulat-
     ing such descriptor  sets:   FD_ZERO(&fdset)  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
     nonzero 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-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 exceptfds may be given as zero
     pointers if no descriptors are of interest.




                                                                1





select(3N)              LIBRARY FUNCTIONS              select(3N)



RETURN VALUE
     Select returns the number of ready descriptors that are con-
     tained  in  the descriptor sets, or -1 if an error occurred.
     If the time limit expires then 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 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 invalid.  One  of
                    its components is negative or too large.

SEE ALSO
     accept(3N),  connect(3N),   read(2),   write(2),   recv(3N),
     send(3N), getdtablesize(3)

BUGS
     Although the provision of getdtablesize(3) was  intended  to
     allow  user programs to be written independent of the kernel
     limit on the number of open files, the dimension of a suffi-
     ciently  large  bit field for select remains a problem.  The
     default size FD_SETSIZE (currently 256) is  somewhat  larger
     than  the  current kernel limit to the number of open files.
     However, in order to accommodate programs which might poten-
     tially  use a larger number of open files with select, it is
     possible to increase this size within a program by providing
     a  larger  definition  of FD_SETSIZE before the inclusion of
     <sys/types.h>.

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













                                                                2



Typewritten Software • bear@typewritten.org • Edmonds, WA 98026