1 .\"
   2 .\" Sun Microsystems, Inc. gratefully acknowledges The Open Group for
   3 .\" permission to reproduce portions of its copyrighted documentation.
   4 .\" Original documentation from The Open Group can be obtained online at
   5 .\" http://www.opengroup.org/bookstore/.
   6 .\"
   7 .\" The Institute of Electrical and Electronics Engineers and The Open
   8 .\" Group, have given us permission to reprint portions of their
   9 .\" documentation.
  10 .\"
  11 .\" In the following statement, the phrase ``this text'' refers to portions
  12 .\" of the system documentation.
  13 .\"
  14 .\" Portions of this text are reprinted and reproduced in electronic form
  15 .\" in the SunOS Reference Manual, from IEEE Std 1003.1, 2004 Edition,
  16 .\" Standard for Information Technology -- Portable Operating System
  17 .\" Interface (POSIX), The Open Group Base Specifications Issue 6,
  18 .\" Copyright (C) 2001-2004 by the Institute of Electrical and Electronics
  19 .\" Engineers, Inc and The Open Group.  In the event of any discrepancy
  20 .\" between these versions and the original IEEE and The Open Group
  21 .\" Standard, the original IEEE and The Open Group Standard is the referee
  22 .\" document.  The original Standard can be obtained online at
  23 .\" http://www.opengroup.org/unix/online.html.
  24 .\"
  25 .\" This notice shall appear on any product containing this material.
  26 .\"
  27 .\" The contents of this file are subject to the terms of the
  28 .\" Common Development and Distribution License (the "License").
  29 .\" You may not use this file except in compliance with the License.
  30 .\"
  31 .\" You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
  32 .\" or http://www.opensolaris.org/os/licensing.
  33 .\" See the License for the specific language governing permissions
  34 .\" and limitations under the License.
  35 .\"
  36 .\" When distributing Covered Code, include this CDDL HEADER in each
  37 .\" file and include the License file at usr/src/OPENSOLARIS.LICENSE.
  38 .\" If applicable, add the following below this CDDL HEADER, with the
  39 .\" fields enclosed by brackets "[]" replaced with your own identifying
  40 .\" information: Portions Copyright [yyyy] [name of copyright owner]
  41 .\"
  42 .\"
  43 .\" Portions Copyright (c) 1992, X/Open Company Limited.  All Rights Reserved.
  44 .\" Copyright (c) 2004, Sun Microsystems, Inc. All Rights Reserved.
  45 .\"
  46 .Dd "Dec 28, 2016"
  47 .Dt SELECT 3C
  48 .Os
  49 .Sh NAME
  50 .Nm select ,
  51 .Nm pselect ,
  52 .Nm FD_SET ,
  53 .Nm FD_CLR ,
  54 .Nm FD_ISSET ,
  55 .Nm FD_ZERO
  56 .Nd synchronous I/O multiplexing
  57 .Sh SYNOPSIS
  58 .In sys/time.h
  59 .Ft int
  60 .Fo select
  61 .Fa "int nfds"
  62 .Fa "fd_set *restrict readfds"
  63 .Fa "fd_set *restrict writefds"
  64 .Fa "fd_set *restrict errorfds"
  65 .Fa "struct timeval *restrict timeout"
  66 .Fc
  67 .Ft int
  68 .Fo pselect
  69 .Fa "int nfds"
  70 .Fa "fd_set *restrict readfds"
  71 .Fa "fd_set *restrict writefds"
  72 .Fa "fd_set *restrict errorfds"
  73 .Fa "const struct timespec *restrict timeout"
  74 .Fa "const sigset_t *restrict sigmask"
  75 .Fc
  76 .Ft void
  77 .Fo FD_SET
  78 .Fa "int fd"
  79 .Fa "fd_set *fdset"
  80 .Fc
  81 .Ft void
  82 .Fo FD_CLR
  83 .Fa "int fd"
  84 .Fa "fd_set *fdset"
  85 .Fc
  86 .Ft int
  87 .Fo FD_ISSET
  88 .Fa "int fd"
  89 .Fa "fd_set *fd_set"
  90 .Fc
  91 .Ft void
  92 .Fo FD_ZERO
  93 .Fa "fd_set *fdset"
  94 .Fc
  95 .Sh DESCRIPTION
  96 The
  97 .Fn pselect
  98 function examines the file descriptor sets whose addresses
  99 are passed in the
 100 .Fa readfds ,
 101 .Fa writefds ,
 102 and
 103 .Fa errorfds
 104 parameters to see if some of their descriptors are ready for reading,
 105 are ready for writing, or have an exceptional condition pending,
 106 respectively.
 107 .Pp
 108 The
 109 .Fn select
 110 function is equivalent to the
 111 .Fn pselect
 112 function, except as follows:
 113 .Bl -bullet
 114 .It
 115 For the
 116 .Fn select
 117 function, the timeout period is given in seconds and
 118 microseconds in an argument of type
 119 .Vt struct timeval ,
 120 whereas for the
 121 .Fn pselect
 122 function the timeout period is given in seconds and nanoseconds
 123 in an argument of type
 124 .Vt struct timespec
 125 .It
 126 The
 127 .Fn select
 128 function has no
 129 .Fa sigmask
 130 argument.
 131 It behaves as
 132 .Fn pselect
 133 does when
 134 .Fa sigmask
 135 is a null pointer.
 136 .It
 137 Upon successful completion, the
 138 .Fn select
 139 function might modify the object pointed to by the
 140 .Fa Itimeout
 141 argument.
 142 .El
 143 .Pp
 144 The
 145 .Fn select
 146 and
 147 .Fn pselect
 148 functions support regular files, terminal and pseudo-terminal devices,
 149 STREAMS-based files, FIFOs, pipes, and sockets.
 150 The behavior of
 151 .Fn select
 152 and
 153 .Fn pselect
 154 on file descriptors that refer to other types of file is unspecified.
 155 .Pp
 156 The
 157 .Fa nfds
 158 argument specifies the range of file descriptors to be tested.
 159 The first
 160 .Fa nfds
 161 descriptors are checked in each set; that is, the
 162 descriptors from zero through
 163 .Dq Li nfds - 1
 164 in the descriptor sets are examined.
 165 .Pp
 166 If the
 167 .Fa readfs
 168 argument is not a null pointer, it points to an object of
 169 type
 170 .Vt fd_set
 171 that on input specifies the file descriptors to be checked
 172 for being ready to read, and on output indicates which file descriptors are
 173 ready to read.
 174 .Pp
 175 If the
 176 .Fa writefs
 177 argument is not a null pointer, it points to an object of
 178 type
 179 .Vt fd_set
 180 that on input specifies the file descriptors to be checked
 181 for being ready to write, and on output indicates which file descriptors are
 182 ready to write.
 183 .Pp
 184 If the
 185 .Fa errorfds
 186 argument is not a null pointer, it points to an object of
 187 type
 188 .Vt fd_set
 189 that on input specifies the file descriptors to be checked
 190 for error conditions pending, and on output indicates which file descriptors
 191 have error conditions pending.
 192 .Pp
 193 Upon successful completion, the objects pointed to by the
 194 .Fa readfs ,
 195 .Fa writefs ,
 196 and
 197 .Fa errorfds
 198 arguments are modified to indicate which file descriptors are ready for reading,
 199 ready for writing, or have an error condition pending, respectively, and return
 200 the total number of ready descriptors in all the output sets.
 201 For each file descriptor less than
 202 .Fa nfds ,
 203 the corresponding bit will be set on successful completion if it was set on
 204 input and the associated condition is true for that file descriptor.
 205 .Pp
 206 If none of the selected descriptors are ready for the requested operation, the
 207 .Fn select
 208 or
 209 .Fn pselect
 210 function blocks until at least one of the
 211 requested operations becomes ready, until the timeout occurs, or until
 212 interrupted by a signal.
 213 The
 214 .Fa timeout
 215 parameter controls how long the
 216 .Fn select
 217 or
 218 .Fn pselect
 219 function takes before timing out.
 220 If the
 221 .Fa timeout
 222 parameter is not a null pointer, it specifies a maximum interval
 223 to wait for the selection to complete.
 224 If the specified time interval expires without any requested operation becoming
 225 ready, the function returns.
 226 If the
 227 .Fa timeout
 228 parameter is a null pointer, then the call to
 229 .Fn select
 230 or
 231 .Fn pselect
 232 blocks indefinitely until at least one descriptor meets the
 233 specified criteria.
 234 To effect a poll, the
 235 .Fa timeout
 236 parameter should not be a null pointer, and should point to a zero-valued
 237 .Vt timespec
 238 structure.
 239 .Pp
 240 The use of a
 241 .Fa timeout
 242 does not affect any pending timers set up by
 243 .Xr alarm 2 ,
 244 .Xr ualarm 3C ,
 245 or
 246 .Xr setitimer 2 .
 247 .Pp
 248 If
 249 .Fa sigmask
 250 is not a null pointer, then the
 251 .Fn pselect
 252 function replaces the signal mask of the process by the set of signals pointed
 253 to by
 254 .Fa sigmask
 255 before examining the descriptors, and restores the signal mask of
 256 the process before returning.
 257 .Pp
 258 A descriptor is considered ready for reading when a call to an input function
 259 with
 260 .Dv O_NONBLOCK
 261 clear would not block, whether or not the function would
 262 transfer data successfully.
 263 (The function might return data, an end-of-file indication, or an error other
 264 than one indicating that it is blocked, and in each of these cases the
 265 descriptor will be considered ready for reading.)
 266 .Pp
 267 A descriptor is considered ready for writing when a call to an output function
 268 with
 269 .Dv O_NONBLOCK
 270 clear would not block, whether or not the function would
 271 transfer data successfully.
 272 .Pp
 273 If a socket has a pending error, it is considered to have an exceptional
 274 condition pending.
 275 Otherwise, what constitutes an exceptional condition is file type-specific.
 276 For a file descriptor for use with a socket, it is protocol-specific except as
 277 noted below.
 278 For other file types, if the operation is meaningless for a particular file
 279 type,
 280 .Fn select
 281 or
 282 .Fn pselect
 283 indicates that the descriptor is ready for read or write operations and
 284 indicates that the descriptor has no exceptional condition pending.
 285 .Pp
 286 If a descriptor refers to a socket, the implied input function is the
 287 .Xr recvmsg 3XNET
 288 function with parameters requesting normal and ancillary
 289 data, such that the presence of either type causes the socket to be marked as
 290 readable.
 291 The presence of out-of-band data is checked if the socket option
 292 .Dv SO_OOBINLINE
 293 has been enabled, as out-of-band data is enqueued with
 294 normal data.
 295 If the socket is currently listening, then it is marked as readable if an
 296 incoming connection request has been received, and a call to the accept function
 297 completes without blocking.
 298 .Pp
 299 If a descriptor refers to a socket, the implied output function is the
 300 .Xr sendmsg 3XNET
 301 function supplying an amount of normal data equal to the
 302 current value of the
 303 .Dv SO_SNDLOWAT
 304 option for the socket.
 305 If a non-blocking call to the connect function has been made for a socket, and
 306 the connection attempt has either succeeded or failed leaving a pending error,
 307 the socket is marked as writable.
 308 .Pp
 309 A socket is considered to have an exceptional condition pending if a receive
 310 operation with
 311 .Dv O_NONBLOCK
 312 clear for the open file description and with the
 313 .Dv MSG_OOB
 314 flag set would return out-of-band data without blocking.
 315 (It is protocol-specific whether the
 316 .Dv MSG_OOB
 317 flag would be used to read out-of-band data.)
 318 A socket will also be considered to have an exceptional condition pending if an
 319 out-of-band data mark is present in the receive queue.
 320 .Pp
 321 A file descriptor for a socket that is listening for connections will indicate
 322 that it is ready for reading, when connections are available.
 323 A file descriptor for a socket that is connecting asynchronously will indicate
 324 that it is ready for writing, when a connection has been established.
 325 .Pp
 326 Selecting true for reading on a socket descriptor upon which a
 327 .Xr listen 3XNET
 328 call has been performed indicates that a subsequent
 329 .Xr accept 3XNET
 330 call on that descriptor will not block.
 331 .Pp
 332 If the
 333 .Fa timeout
 334 argument is not a null pointer, it points to an object of type
 335 .Vt struct timeval
 336 that specifies a maximum interval to wait for the
 337 selection to complete.
 338 If the
 339 .Fa timeout
 340 argument points to an object of type
 341 .Vt struct timeval
 342 whose members are 0,
 343 .Fn select
 344 does not block.
 345 If the
 346 .Fa timeout
 347 argument is a null pointer,
 348 .Fn select
 349 blocks until an event causes one of the masks to be returned with a valid
 350 (non-zero) value.
 351 If the time limit expires before any event occurs that would cause one of the
 352 masks to be set to a non-zero value,
 353 .Fn select
 354 completes successfully and returns 0.
 355 .Pp
 356 If the
 357 .Fa readfs ,
 358 .Fa writefds ,
 359 and
 360 .Fa errorfds
 361 arguments are all null pointers and the
 362 .Fa timeout
 363 argument is not a null pointer,
 364 .Fn select
 365 or
 366 .Fn pselect
 367 blocks for the time specified, or until interrupted by a
 368 signal.
 369 If the
 370 .Fa readfds ,
 371 .Fa writefds ,
 372 and
 373 .Fa errorfds
 374 arguments are all null pointers and the
 375 .Fa timeout
 376 argument is a null pointer,
 377 .Fn select
 378 blocks until interrupted by a signal.
 379 .Pp
 380 File descriptors associated with regular files always select true for ready to
 381 read, ready to write, and error conditions.
 382 .Pp
 383 On failure, the objects pointed to by the
 384 .Fa readfds ,
 385 .Fa writefds ,
 386 and
 387 .Fa errorfds
 388 arguments are not modified.
 389 If the timeout interval expires without the specified condition being true for
 390 any of the specified file descriptors, the objects pointed to by the
 391 .Fa readfds ,
 392 .Fa writefds ,
 393 and
 394 .Fa errorfds
 395 arguments have all bits set to 0.
 396 .Pp
 397 File descriptor masks of type
 398 .Vt fd_set
 399 can be initialized and tested with the macros
 400 .Fn FD_CLR ,
 401 .Fn FD_ISSET ,
 402 .Fn FD_SET ,
 403 and
 404 .Fn FD_ZERO .
 405 .Bl -tag -width indent
 406 .It Fn FD_CLR "fd" "&fdset"
 407 Clears the bit for the file descriptor
 408 .Fa fd
 409 in the file descriptor set
 410 .Fa fdset .
 411 .It Fn FD_ISSET "fd" "&fdset"
 412 Returns a non-zero value if the bit for the file descriptor
 413 .Fa fd
 414 is set in
 415 the file descriptor set pointed to by
 416 .Fa fdset ,
 417 and 0 otherwise.
 418 .It Fn FD_SET "fd" "&fdset"
 419 Sets the bit for the file descriptor
 420 .Fa fd
 421 in the file descriptor set
 422 .Fa fdset
 423 .It Fn FD_ZERO "&fdset"
 424 Initializes the file descriptor set \fIfdset\fR to have zero bits for all file
 425 descriptors.
 426 .El
 427 .Pp
 428 The behavior of these macros is undefined if the
 429 .Fa fd
 430 argument is less than 0 or greater than or equal to
 431 .Dv FD_SETSIZE ,
 432 or if
 433 .Fa fd
 434 is not a valid file descriptor, or if any of the arguments are expressions
 435 with side effects.
 436 .Sh RETURN VALUES
 437 On successful completion,
 438 .Fn select
 439 and
 440 .Fn pselect
 441 return the total
 442 number of bits set in the bit masks.
 443 Otherwise,
 444 .Sy 1
 445 is returned and
 446 .Dv errno
 447 is set to indicate the error.
 448 .Pp
 449 The
 450 .Fn FD_CLR ,
 451 .Fn FD_SET ,
 452 and
 453 .Fn FD_ZERO ,
 454 macros return no value.
 455 The
 456 .Fn FD_ISSET
 457 macro returns a non-zero value if the bit for the file
 458 descriptor
 459 .Fa fd
 460 is set in the file descriptor set pointed to by
 461 .Fa fdset ,
 462 and
 463 .Sy 0
 464 otherwise.
 465 .Sh ERRORS
 466 The
 467 .Fn select
 468 and
 469 .Fn pselect
 470 functions will fail if:
 471 .Bl -tag -width indent
 472 .It Er EBADF
 473 One or more of the file descriptor sets specified a file descriptor that is not
 474 a valid open file descriptor.
 475 .It Er EINTR
 476 The function was interrupted before any of the selected events occurred and
 477 before the timeout interval expired.
 478 .Pp
 479 If
 480 .Dv SA_RESTART
 481 has been set for the interrupting signal, it is implementation-dependent whether
 482 .Fn select
 483 restarts or returns with
 484 .Dv EINTR
 485 .It Er EINVAL
 486 An invalid timeout interval was specified.
 487 .It Er EINVAL
 488 The
 489 .Fa nfds
 490 argument is less than 0 or greater than
 491 .Dv FD_SETSIZE .
 492 .It Er EINVAL
 493 One of the specified file descriptors refers to a STREAM or multiplexer that is
 494 linked (directly or indirectly) downstream from a multiplexer.
 495 .It Er EINVAL
 496 A component of the pointed-to time limit is outside the acceptable range:
 497 .Dv t_sec
 498 must be between 0 and 10^8, inclusive.
 499 .Dv t_usec
 500 must be greater than or equal to 0, and less than 10^6.
 501 .El
 502 .Sh USAGE
 503 The
 504 .Xr poll 2
 505 function is preferred over this function.
 506 .Pp
 507 The use of a timeout does not affect any pending timers set up by
 508 .Xr alarm 2 ,
 509 .Xr ualarm 3C ,
 510 or
 511 .Xr setitimer 2 .
 512 .Pp
 513 On successful completion, the object pointed to by the
 514 .Fa timeout
 515 argument may be modified.
 516 .Sh INTERFACE STABILITY
 517 .Sy Standard
 518 .Sh MT Level
 519 .Sy MT-Safe
 520 .Sh SEE ALSO
 521 .Xr alarm 2 ,
 522 .Xr fcntl 2 ,
 523 .Xr poll 2 ,
 524 .Xr read 2 ,
 525 .Xr setitimer 2 ,
 526 .Xr write 2 ,
 527 .Xr ualarm 3C ,
 528 .Xr accept 3SOCKET ,
 529 .Xr listen 3SOCKET ,
 530 .Xr attributes 5 ,
 531 .Xr standards 5