xref: /xnu-8792.81.2/bsd/man/man2/select.2 (revision 19c3b8c28c31cb8130e034cfb5df6bf9ba342d90)
1*19c3b8c2SApple OSS Distributions.\"	$NetBSD: select.2,v 1.5 1995/06/27 22:32:28 cgd Exp $
2*19c3b8c2SApple OSS Distributions.\"
3*19c3b8c2SApple OSS Distributions.\" Copyright (c) 1983, 1991, 1993
4*19c3b8c2SApple OSS Distributions.\"	The Regents of the University of California.  All rights reserved.
5*19c3b8c2SApple OSS Distributions.\"
6*19c3b8c2SApple OSS Distributions.\" Redistribution and use in source and binary forms, with or without
7*19c3b8c2SApple OSS Distributions.\" modification, are permitted provided that the following conditions
8*19c3b8c2SApple OSS Distributions.\" are met:
9*19c3b8c2SApple OSS Distributions.\" 1. Redistributions of source code must retain the above copyright
10*19c3b8c2SApple OSS Distributions.\"    notice, this list of conditions and the following disclaimer.
11*19c3b8c2SApple OSS Distributions.\" 2. Redistributions in binary form must reproduce the above copyright
12*19c3b8c2SApple OSS Distributions.\"    notice, this list of conditions and the following disclaimer in the
13*19c3b8c2SApple OSS Distributions.\"    documentation and/or other materials provided with the distribution.
14*19c3b8c2SApple OSS Distributions.\" 3. All advertising materials mentioning features or use of this software
15*19c3b8c2SApple OSS Distributions.\"    must display the following acknowledgement:
16*19c3b8c2SApple OSS Distributions.\"	This product includes software developed by the University of
17*19c3b8c2SApple OSS Distributions.\"	California, Berkeley and its contributors.
18*19c3b8c2SApple OSS Distributions.\" 4. Neither the name of the University nor the names of its contributors
19*19c3b8c2SApple OSS Distributions.\"    may be used to endorse or promote products derived from this software
20*19c3b8c2SApple OSS Distributions.\"    without specific prior written permission.
21*19c3b8c2SApple OSS Distributions.\"
22*19c3b8c2SApple OSS Distributions.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
23*19c3b8c2SApple OSS Distributions.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
24*19c3b8c2SApple OSS Distributions.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
25*19c3b8c2SApple OSS Distributions.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
26*19c3b8c2SApple OSS Distributions.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
27*19c3b8c2SApple OSS Distributions.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
28*19c3b8c2SApple OSS Distributions.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
29*19c3b8c2SApple OSS Distributions.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30*19c3b8c2SApple OSS Distributions.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
31*19c3b8c2SApple OSS Distributions.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
32*19c3b8c2SApple OSS Distributions.\" SUCH DAMAGE.
33*19c3b8c2SApple OSS Distributions.\"
34*19c3b8c2SApple OSS Distributions.\"     @(#)select.2	8.2 (Berkeley) 3/25/94
35*19c3b8c2SApple OSS Distributions.\"
36*19c3b8c2SApple OSS Distributions.Dd March 18, 2015
37*19c3b8c2SApple OSS Distributions.Dt SELECT 2
38*19c3b8c2SApple OSS Distributions.Os BSD 4.2
39*19c3b8c2SApple OSS Distributions.Sh NAME
40*19c3b8c2SApple OSS Distributions.Nm FD_CLR ,
41*19c3b8c2SApple OSS Distributions.Nm FD_COPY ,
42*19c3b8c2SApple OSS Distributions.Nm FD_ISSET ,
43*19c3b8c2SApple OSS Distributions.Nm FD_SET ,
44*19c3b8c2SApple OSS Distributions.Nm FD_ZERO ,
45*19c3b8c2SApple OSS Distributions.Nm select
46*19c3b8c2SApple OSS Distributions.Nd synchronous I/O multiplexing
47*19c3b8c2SApple OSS Distributions.Sh SYNOPSIS
48*19c3b8c2SApple OSS Distributions.Fd #include <sys/select.h>
49*19c3b8c2SApple OSS Distributions.\"
50*19c3b8c2SApple OSS Distributions.Ft void
51*19c3b8c2SApple OSS Distributions.Fo FD_CLR
52*19c3b8c2SApple OSS Distributions.Fa fd
53*19c3b8c2SApple OSS Distributions.Fa "fd_set *fdset"
54*19c3b8c2SApple OSS Distributions.Fc
55*19c3b8c2SApple OSS Distributions.Ft void
56*19c3b8c2SApple OSS Distributions.Fo FD_COPY
57*19c3b8c2SApple OSS Distributions.Fa "fd_set *fdset_orig"
58*19c3b8c2SApple OSS Distributions.Fa "fd_set *fdset_copy"
59*19c3b8c2SApple OSS Distributions.Fc
60*19c3b8c2SApple OSS Distributions.Ft int
61*19c3b8c2SApple OSS Distributions.Fo FD_ISSET
62*19c3b8c2SApple OSS Distributions.Fa fd
63*19c3b8c2SApple OSS Distributions.Fa "fd_set *fdset"
64*19c3b8c2SApple OSS Distributions.Fc
65*19c3b8c2SApple OSS Distributions.Ft void
66*19c3b8c2SApple OSS Distributions.Fo FD_SET
67*19c3b8c2SApple OSS Distributions.Fa fd
68*19c3b8c2SApple OSS Distributions.Fa "fd_set *fdset"
69*19c3b8c2SApple OSS Distributions.Fc
70*19c3b8c2SApple OSS Distributions.Ft void
71*19c3b8c2SApple OSS Distributions.Fo FD_ZERO
72*19c3b8c2SApple OSS Distributions.Fa "fd_set *fdset"
73*19c3b8c2SApple OSS Distributions.Fc
74*19c3b8c2SApple OSS Distributions.Ft int
75*19c3b8c2SApple OSS Distributions.Fo select
76*19c3b8c2SApple OSS Distributions.Fa "int nfds"
77*19c3b8c2SApple OSS Distributions.Fa "fd_set *restrict readfds"
78*19c3b8c2SApple OSS Distributions.Fa "fd_set *restrict writefds"
79*19c3b8c2SApple OSS Distributions.Fa "fd_set *restrict errorfds"
80*19c3b8c2SApple OSS Distributions.Fa "struct timeval *restrict timeout"
81*19c3b8c2SApple OSS Distributions.Fc
82*19c3b8c2SApple OSS Distributions.Sh DESCRIPTION
83*19c3b8c2SApple OSS Distributions.Fn select
84*19c3b8c2SApple OSS Distributionsexamines the I/O descriptor sets whose addresses are passed in
85*19c3b8c2SApple OSS Distributions.Fa readfds ,
86*19c3b8c2SApple OSS Distributions.Fa writefds ,
87*19c3b8c2SApple OSS Distributionsand
88*19c3b8c2SApple OSS Distributions.Fa errorfds
89*19c3b8c2SApple OSS Distributionsto see if some of their descriptors
90*19c3b8c2SApple OSS Distributionsare ready for reading, are ready for writing, or have an exceptional
91*19c3b8c2SApple OSS Distributionscondition pending, respectively.
92*19c3b8c2SApple OSS DistributionsThe first
93*19c3b8c2SApple OSS Distributions.Fa nfds
94*19c3b8c2SApple OSS Distributionsdescriptors are checked in each set;
95*19c3b8c2SApple OSS Distributionsi.e., the descriptors from 0 through
96*19c3b8c2SApple OSS Distributions.Fa nfds Ns No -1
97*19c3b8c2SApple OSS Distributionsin the descriptor sets are examined.  (Example: If you have set two file descriptors "4" and "17",
98*19c3b8c2SApple OSS Distributions.Fa nfds
99*19c3b8c2SApple OSS Distributionsshould  not be "2", but rather "17 + 1" or "18".)
100*19c3b8c2SApple OSS DistributionsOn return,
101*19c3b8c2SApple OSS Distributions.Fn select
102*19c3b8c2SApple OSS Distributionsreplaces the given descriptor sets
103*19c3b8c2SApple OSS Distributionswith subsets consisting of those descriptors that are ready
104*19c3b8c2SApple OSS Distributionsfor the requested operation.
105*19c3b8c2SApple OSS Distributions.Fn select
106*19c3b8c2SApple OSS Distributionsreturns the total number of ready descriptors in all the sets.
107*19c3b8c2SApple OSS Distributions.Pp
108*19c3b8c2SApple OSS DistributionsThe descriptor sets are stored as bit fields in arrays of integers.
109*19c3b8c2SApple OSS DistributionsThe following macros are provided for manipulating such descriptor sets:
110*19c3b8c2SApple OSS Distributions.Fn FD_ZERO &fdset
111*19c3b8c2SApple OSS Distributionsinitializes a descriptor set
112*19c3b8c2SApple OSS Distributions.Fa fdset
113*19c3b8c2SApple OSS Distributionsto the null set.
114*19c3b8c2SApple OSS Distributions.Fn FD_SET fd &fdset
115*19c3b8c2SApple OSS Distributionsincludes a particular descriptor
116*19c3b8c2SApple OSS Distributions.Fa fd
117*19c3b8c2SApple OSS Distributionsin
118*19c3b8c2SApple OSS Distributions.Fa fdset .
119*19c3b8c2SApple OSS Distributions.Fn FD_CLR fd &fdset
120*19c3b8c2SApple OSS Distributionsremoves
121*19c3b8c2SApple OSS Distributions.Fa fd
122*19c3b8c2SApple OSS Distributionsfrom
123*19c3b8c2SApple OSS Distributions.Fa fdset .
124*19c3b8c2SApple OSS Distributions.Fn FD_ISSET fd &fdset
125*19c3b8c2SApple OSS Distributionsis non-zero if
126*19c3b8c2SApple OSS Distributions.Fa fd
127*19c3b8c2SApple OSS Distributionsis a member of
128*19c3b8c2SApple OSS Distributions.Fa fdset ,
129*19c3b8c2SApple OSS Distributionszero otherwise.
130*19c3b8c2SApple OSS Distributions.Fn FD_COPY &fdset_orig &fdset_copy
131*19c3b8c2SApple OSS Distributionsreplaces an already allocated
132*19c3b8c2SApple OSS Distributions.Fa &fdset_copy
133*19c3b8c2SApple OSS Distributionsfile descriptor set with a copy of
134*19c3b8c2SApple OSS Distributions.Fa &fdset_orig .
135*19c3b8c2SApple OSS DistributionsThe behavior of these macros is undefined if
136*19c3b8c2SApple OSS Distributionsa descriptor value is less than zero or greater than or equal to
137*19c3b8c2SApple OSS Distributions.Dv FD_SETSIZE ,
138*19c3b8c2SApple OSS Distributionswhich is normally at least equal
139*19c3b8c2SApple OSS Distributionsto the maximum number of descriptors supported by the system.
140*19c3b8c2SApple OSS Distributions.Pp
141*19c3b8c2SApple OSS DistributionsIf
142*19c3b8c2SApple OSS Distributions.Fa timeout
143*19c3b8c2SApple OSS Distributionsis not a null pointer, it specifies a maximum interval to wait for the
144*19c3b8c2SApple OSS Distributionsselection to complete.
145*19c3b8c2SApple OSS Distributions.Pp
146*19c3b8c2SApple OSS DistributionsIf
147*19c3b8c2SApple OSS Distributions.Fa timeout
148*19c3b8c2SApple OSS Distributionsis a null pointer, the select blocks indefinitely.
149*19c3b8c2SApple OSS Distributions.Pp
150*19c3b8c2SApple OSS DistributionsTo effect a poll, the
151*19c3b8c2SApple OSS Distributions.Fa timeout
152*19c3b8c2SApple OSS Distributionsargument should be not be a null pointer,
153*19c3b8c2SApple OSS Distributionsbut it should point to a zero-valued timeval structure.
154*19c3b8c2SApple OSS Distributions.Pp
155*19c3b8c2SApple OSS Distributions.Fa timeout
156*19c3b8c2SApple OSS Distributionsis not changed by
157*19c3b8c2SApple OSS Distributions.Fn select ,
158*19c3b8c2SApple OSS Distributionsand may be reused on subsequent calls, however it is good style to re-initialize
159*19c3b8c2SApple OSS Distributionsit before each invocation of
160*19c3b8c2SApple OSS Distributions.Fn select .
161*19c3b8c2SApple OSS Distributions.Pp
162*19c3b8c2SApple OSS DistributionsAny of
163*19c3b8c2SApple OSS Distributions.Fa readfds ,
164*19c3b8c2SApple OSS Distributions.Fa writefds ,
165*19c3b8c2SApple OSS Distributionsand
166*19c3b8c2SApple OSS Distributions.Fa errorfds
167*19c3b8c2SApple OSS Distributionsmay be given as null pointers if no descriptors are of interest.
168*19c3b8c2SApple OSS Distributions.Sh RETURN VALUES
169*19c3b8c2SApple OSS Distributions.Fn select
170*19c3b8c2SApple OSS Distributionsreturns the number of ready descriptors that are contained in
171*19c3b8c2SApple OSS Distributionsthe descriptor sets,
172*19c3b8c2SApple OSS Distributionsor -1 if an error occurred.
173*19c3b8c2SApple OSS DistributionsIf the time limit expires,
174*19c3b8c2SApple OSS Distributions.Fn select
175*19c3b8c2SApple OSS Distributionsreturns 0.
176*19c3b8c2SApple OSS DistributionsIf
177*19c3b8c2SApple OSS Distributions.Fn select
178*19c3b8c2SApple OSS Distributionsreturns with an error,
179*19c3b8c2SApple OSS Distributionsincluding one due to an interrupted call,
180*19c3b8c2SApple OSS Distributionsthe descriptor sets will be unmodified and the global variable
181*19c3b8c2SApple OSS Distributions.Va errno
182*19c3b8c2SApple OSS Distributionswill be set to indicate the error.
183*19c3b8c2SApple OSS Distributions.Sh ERRORS
184*19c3b8c2SApple OSS DistributionsAn error return from
185*19c3b8c2SApple OSS Distributions.Fn select
186*19c3b8c2SApple OSS Distributionsindicates:
187*19c3b8c2SApple OSS Distributions.Bl -tag -width Er
188*19c3b8c2SApple OSS Distributions.\" ===========
189*19c3b8c2SApple OSS Distributions.It Bq Er EAGAIN
190*19c3b8c2SApple OSS DistributionsThe kernel was (perhaps temporarily) unable
191*19c3b8c2SApple OSS Distributionsto allocate the requested number of file descriptors.
192*19c3b8c2SApple OSS Distributions.\" ===========
193*19c3b8c2SApple OSS Distributions.It Bq Er EBADF
194*19c3b8c2SApple OSS DistributionsOne of the descriptor sets specified an invalid descriptor.
195*19c3b8c2SApple OSS Distributions.\" ===========
196*19c3b8c2SApple OSS Distributions.It Bq Er EINTR
197*19c3b8c2SApple OSS DistributionsA signal was delivered before the time limit expired and
198*19c3b8c2SApple OSS Distributionsbefore any of the selected events occurred.
199*19c3b8c2SApple OSS Distributions.\" ===========
200*19c3b8c2SApple OSS Distributions.It Bq Er EINVAL
201*19c3b8c2SApple OSS DistributionsThe specified time limit is invalid.  One of its components is
202*19c3b8c2SApple OSS Distributionsnegative or too large.
203*19c3b8c2SApple OSS Distributions.\" ===========
204*19c3b8c2SApple OSS Distributions.It Bq Er EINVAL
205*19c3b8c2SApple OSS Distributions.Fa ndfs
206*19c3b8c2SApple OSS Distributionsis greater than FD_SETSIZE and _DARWIN_UNLIMITED_SELECT is not defined.
207*19c3b8c2SApple OSS Distributions.El
208*19c3b8c2SApple OSS Distributions.Sh LEGACY SYNOPSIS
209*19c3b8c2SApple OSS Distributions.Fd #include <sys/select.h>
210*19c3b8c2SApple OSS Distributions.D1 "- or -"
211*19c3b8c2SApple OSS Distributions.Fd #include <sys/types.h>
212*19c3b8c2SApple OSS Distributions.Fd #include <sys/time.h>
213*19c3b8c2SApple OSS Distributions.Fd #include <unistd.h>
214*19c3b8c2SApple OSS Distributions.Pp
215*19c3b8c2SApple OSS Distributions.Fo FD_SET
216*19c3b8c2SApple OSS Distributions.Fa fd
217*19c3b8c2SApple OSS Distributions.Fa &fdset
218*19c3b8c2SApple OSS Distributions.Fc ;
219*19c3b8c2SApple OSS Distributions.Pp
220*19c3b8c2SApple OSS Distributions.Fo FD_CLR
221*19c3b8c2SApple OSS Distributions.Fa fd
222*19c3b8c2SApple OSS Distributions.Fa &fdset
223*19c3b8c2SApple OSS Distributions.Fc ;
224*19c3b8c2SApple OSS Distributions.Pp
225*19c3b8c2SApple OSS Distributions.Fo FD_ISSET
226*19c3b8c2SApple OSS Distributions.Fa fd
227*19c3b8c2SApple OSS Distributions.Fa &fdset
228*19c3b8c2SApple OSS Distributions.Fc ;
229*19c3b8c2SApple OSS Distributions.Pp
230*19c3b8c2SApple OSS Distributions.Fo FD_COPY
231*19c3b8c2SApple OSS Distributions.Fa &fdset_orig
232*19c3b8c2SApple OSS Distributions.Fa &fdset_copy
233*19c3b8c2SApple OSS Distributions.Fc ;
234*19c3b8c2SApple OSS Distributions.Pp
235*19c3b8c2SApple OSS Distributions.Fo FD_ZERO
236*19c3b8c2SApple OSS Distributions.Fa &fdset
237*19c3b8c2SApple OSS Distributions.Fc ;
238*19c3b8c2SApple OSS Distributions.Sh COMPATIBILITY
239*19c3b8c2SApple OSS Distributions.Fn select
240*19c3b8c2SApple OSS Distributionsnow returns with
241*19c3b8c2SApple OSS Distributions.Va errno
242*19c3b8c2SApple OSS Distributionsset to EINVAL when
243*19c3b8c2SApple OSS Distributions.Fa nfds
244*19c3b8c2SApple OSS Distributionsis greater than FD_SETSIZE.
245*19c3b8c2SApple OSS DistributionsUse a smaller value for
246*19c3b8c2SApple OSS Distributions.Fa nfds
247*19c3b8c2SApple OSS Distributionsor compile with -D_DARWIN_UNLIMITED_SELECT.
248*19c3b8c2SApple OSS Distributions.Sh SEE ALSO
249*19c3b8c2SApple OSS Distributions.Xr accept 2 ,
250*19c3b8c2SApple OSS Distributions.Xr connect 2 ,
251*19c3b8c2SApple OSS Distributions.Xr connectx 2 ,
252*19c3b8c2SApple OSS Distributions.Xr getdtablesize 2 ,
253*19c3b8c2SApple OSS Distributions.Xr gettimeofday 2 ,
254*19c3b8c2SApple OSS Distributions.Xr read 2 ,
255*19c3b8c2SApple OSS Distributions.Xr recv 2 ,
256*19c3b8c2SApple OSS Distributions.Xr send 2 ,
257*19c3b8c2SApple OSS Distributions.Xr write 2 ,
258*19c3b8c2SApple OSS Distributions.Xr compat 5
259*19c3b8c2SApple OSS Distributions.Sh BUGS
260*19c3b8c2SApple OSS DistributionsAlthough the provision of
261*19c3b8c2SApple OSS Distributions.Xr getdtablesize 2
262*19c3b8c2SApple OSS Distributionswas intended to allow user programs to be written independent
263*19c3b8c2SApple OSS Distributionsof the kernel limit on the number of open files, the dimension
264*19c3b8c2SApple OSS Distributionsof a sufficiently large bit field for select remains a problem.
265*19c3b8c2SApple OSS DistributionsThe default size
266*19c3b8c2SApple OSS Distributions.Dv FD_SETSIZE
267*19c3b8c2SApple OSS Distributions(currently 1024) is somewhat smaller than
268*19c3b8c2SApple OSS Distributionsthe current kernel limit to the number of open files.
269*19c3b8c2SApple OSS DistributionsHowever, in order to accommodate programs which might potentially
270*19c3b8c2SApple OSS Distributionsuse a larger number of open files with select, it is possible
271*19c3b8c2SApple OSS Distributionsto increase this size within a program by providing
272*19c3b8c2SApple OSS Distributionsa larger definition of
273*19c3b8c2SApple OSS Distributions.Dv FD_SETSIZE
274*19c3b8c2SApple OSS Distributionsbefore the inclusion of
275*19c3b8c2SApple OSS Distributions.Aq Pa sys/types.h .
276*19c3b8c2SApple OSS Distributions.Pp
277*19c3b8c2SApple OSS Distributions.Fn select
278*19c3b8c2SApple OSS Distributionsshould probably have been designed to return the time remaining from the
279*19c3b8c2SApple OSS Distributionsoriginal timeout, if any, by modifying the time value in place.
280*19c3b8c2SApple OSS DistributionsHowever, it is unlikely this semantic will ever be implemented, as the
281*19c3b8c2SApple OSS Distributionschange would cause source code compatibility problems.
282*19c3b8c2SApple OSS DistributionsIn general it is unwise to assume that the timeout value will be
283*19c3b8c2SApple OSS Distributionsunmodified by the
284*19c3b8c2SApple OSS Distributions.Fn select
285*19c3b8c2SApple OSS Distributionscall, and the caller should reinitialize it on each invocation.
286*19c3b8c2SApple OSS Distributions.Sh HISTORY
287*19c3b8c2SApple OSS DistributionsThe
288*19c3b8c2SApple OSS Distributions.Fn select
289*19c3b8c2SApple OSS Distributionsfunction call appeared in
290*19c3b8c2SApple OSS Distributions.Bx 4.2 .
291