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