BSD 4_4 release
[unix-history] / usr / src / lib / libc / sys / select.2
index f260690..3c757cd 100644 (file)
-.\" Copyright (c) 1983 Regents of the University of California.
-.\" All rights reserved.  The Berkeley software License Agreement
-.\" specifies the terms and conditions for redistribution.
+.\" Copyright (c) 1983, 1991, 1993
+.\"    The Regents of the University of California.  All rights reserved.
 .\"
 .\"
-.\"    @(#)select.2    6.2 (Berkeley) %G%
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\" 3. All advertising materials mentioning features or use of this software
+.\"    must display the following acknowledgement:
+.\"    This product includes software developed by the University of
+.\"    California, Berkeley and its contributors.
+.\" 4. Neither the name of the University nor the names of its contributors
+.\"    may be used to endorse or promote products derived from this software
+.\"    without specific prior written permission.
 .\"
 .\"
-.TH SELECT 2 ""
-.UC 5
-.SH NAME
-select \- synchronous i/o multiplexing
-.SH SYNOPSIS
-.nf
-.ft B
-#include <sys/time.h>
-.PP
-.ft B
-nfound = select(nfds, readfds, writefds, exceptfds, timeout)
-int nfound, nfds, *readfds, *writefds, *exceptfds;
-struct timeval *timeout;
-.fi
-.SH DESCRIPTION
-.I Select
-examines the i/o descriptors specified by the bit masks
-.IR readfds ,
-.IR writefds ,
+.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\"     @(#)select.2   8.1 (Berkeley) 6/4/93
+.\"
+.Dd June 4, 1993
+.Dt SELECT 2
+.Os BSD 4.2
+.Sh NAME
+.Nm select
+.Nd synchronous I/O multiplexing
+.Sh SYNOPSIS
+.Fd #include <unistd.h>
+.Fd #include <sys/types.h>
+.Fd #include <sys/time.h>
+.Ft int
+.Fn select "int nfds" "fd_set *readfds" "fd_set *writefds" "fd_set *exceptfds" "struct timeval *timeout"
+.Fn FD_SET fd &fdset
+.Fn FD_CLR fd &fdset
+.Fn FD_ISSET fd &fdset
+.Fn FD_ZERO &fdset
+.Sh DESCRIPTION
+.Fn Select
+examines the I/O descriptor sets whose addresses are passed in
+.Fa readfds ,
+.Fa writefds ,
 and
 and
-.I exceptfds
-to see if they are ready for reading, writing, or have an exceptional
+.Fa exceptfds
+to see if some of their descriptors
+are ready for reading, are ready for writing, or have an exceptional
 condition pending, respectively.
 condition pending, respectively.
-File descriptor 
-.I f
-is represented by the bit \*(lq1<<f\*(rq in
-the mask.
-.I Nfds
-desciptors are checked,
-i.e. the bits from 0 through
-.IR nfds -1
-in the masks are examined.
-.I Select
-returns, in place, a mask of those descriptors that are ready.
-The total number of bits set in all the masks is returned in
-.IR nfound .
-.PP
+The first
+.Fa nfds
+descriptors are checked in each set;
+i.e., the descriptors from 0 through
+.Fa nfds Ns No -1
+in the descriptor sets are examined.
+On return,
+.Fn select
+replaces the given descriptor sets
+with subsets consisting of those descriptors that are ready
+for the requested operation.
+.Fn Select
+returns the total number of ready descriptors in all the sets.
+.Pp
+The descriptor sets are stored as bit fields in arrays of integers.
+The following macros are provided for manipulating such descriptor sets:
+.Fn FD_ZERO &fdsetx
+initializes a descriptor set
+.Fa fdset
+to the null set.
+.Fn FD_SET fd &fdset
+includes a particular descriptor
+.Fa fd
+in
+.Fa fdset .
+.Fn FD_CLR fd &fdset
+removes
+.Fa fd
+from
+.Fa fdset .
+.Fn FD_ISSET fd &fdset
+is non-zero if
+.Fa fd
+is a member of
+.Fa fdset ,
+zero otherwise.
+The behavior of these macros is undefined if
+a descriptor value is less than zero or greater than or equal to
+.Dv FD_SETSIZE ,
+which is normally at least equal
+to the maximum number of descriptors supported by the system.
+.Pp
 If
 If
-.I timeout
-is a non-zero pointer, it specifies a maximum interval to wait for the
+.Fa timeout
+is a non-nil pointer, it specifies a maximum interval to wait for the
 selection to complete.  If 
 selection to complete.  If 
-.I timeout
-is a zero pointer, the select blocks indefinitely.  To affect a poll, the
-.I timeout
-argument should be non-zero, pointing to a zero valued timeval structure.
-.PP
+.Fa timeout
+is a nil pointer, the select blocks indefinitely.  To affect a poll, the
+.Fa timeout
+argument should be non-nil, pointing to a zero-valued timeval structure.
+.Pp
 Any of
 Any of
-.IR readfds ,
-.IR writefds ,
+.Fa readfds ,
+.Fa writefds ,
 and
 and
-.I exceptfds
-may be given as 0 if no descriptors are of interest.
-.SH "RETURN VALUE
-.I Select
-returns the number of 'one' bits that are contained in
-the bit masks,
-or \-1 if an error occurred.
-If the time limit expires then
-.I select
+.Fa exceptfds
+may be given as nil pointers if no descriptors are of interest.
+.Sh RETURN VALUES
+.Fn Select
+returns the number of ready descriptors that are contained in
+the descriptor sets,
+or -1 if an error occurred.
+If the time limit expires,
+.Fn select
 returns 0.
 returns 0.
-.SH "ERRORS
-An error return from \fIselect\fP indicates:
-.TP 15
-[EBADF]
-One of the bit masks specified an invalid descriptor.
-.TP 15
-[EINTR]
+If
+.Fn select
+returns with an error,
+including one due to an interrupted call,
+the descriptor sets will be unmodified.
+.Sh ERRORS
+An error return from
+.Fn select
+indicates:
+.Bl -tag -width Er
+.It Bq Er EBADF
+One of the descriptor sets specified an invalid descriptor.
+.It Bq Er EINTR
 A signal was delivered before the time limit expired and
 before any of the selected events occurred.
 A signal was delivered before the time limit expired and
 before any of the selected events occurred.
-.TP 15
-[EINVAL]
-The specified time limit is unacceptable.  One of its components is
+.It Bq Er EINVAL
+The specified time limit is invalid.  One of its components is
 negative or too large.
 negative or too large.
-.SH SEE ALSO
-accept(2), connect(2), read(2), write(2), recv(2), send(2), getdtablesize(2)
-.SH BUGS
-The descriptor masks are always modified on return, even
-if the call returns as the result of the timeout.
+.El
+.Sh SEE ALSO
+.Xr accept 2 ,
+.Xr connect 2 ,
+.Xr read 2 ,
+.Xr write 2 ,
+.Xr recv 2 ,
+.Xr send 2 ,
+.Xr getdtablesize 2
+.Sh BUGS
+Although the provision of
+.Xr 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
+.Dv 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 potentially
+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
+.Dv FD_SETSIZE
+before the inclusion of
+.Aq Pa sys/types.h .
+.Pp
+.Fn 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
+.Fn select
+call.
+.Sh HISTORY
+The
+.Nm
+function call appeared in
+.Bx 4.2 .