]> git.ipfire.org Git - thirdparty/man-pages.git/blame - man2/select.2
syslog.3: SEE ALSO: add journalctl(1)
[thirdparty/man-pages.git] / man2 / select.2
CommitLineData
fea681da
MK
1.\" This manpage is copyright (C) 1992 Drew Eckhardt,
2.\" copyright (C) 1995 Michael Shields.
3.\"
93015253 4.\" %%%LICENSE_START(VERBATIM)
fea681da
MK
5.\" Permission is granted to make and distribute verbatim copies of this
6.\" manual provided the copyright notice and this permission notice are
7.\" preserved on all copies.
8.\"
9.\" Permission is granted to copy and distribute modified versions of this
10.\" manual under the conditions for verbatim copying, provided that the
11.\" entire resulting derived work is distributed under the terms of a
12.\" permission notice identical to this one.
c13182ef 13.\"
fea681da
MK
14.\" Since the Linux kernel and libraries are constantly changing, this
15.\" manual page may be incorrect or out-of-date. The author(s) assume no
16.\" responsibility for errors or omissions, or for damages resulting from
17.\" the use of the information contained herein. The author(s) may not
18.\" have taken the same level of care in the production of this manual,
19.\" which is licensed free of charge, as they might when working
20.\" professionally.
c13182ef 21.\"
fea681da
MK
22.\" Formatted or processed versions of this manual, if unaccompanied by
23.\" the source, must acknowledge the copyright and authors of this work.
4b72fb64 24.\" %%%LICENSE_END
fea681da
MK
25.\"
26.\" Modified 1993-07-24 by Rik Faith <faith@cs.unc.edu>
27.\" Modified 1995-05-18 by Jim Van Zandt <jrv@vanzandt.mv.com>
28.\" Sun Feb 11 14:07:00 MET 1996 Martin Schulze <joey@linux.de>
29.\" * layout slightly modified
30.\"
31.\" Modified Mon Oct 21 23:05:29 EDT 1996 by Eric S. Raymond <esr@thyrsus.com>
32.\" Modified Thu Feb 24 01:41:09 CET 2000 by aeb
33.\" Modified Thu Feb 9 22:32:09 CET 2001 by bert hubert <ahu@ds9a.nl>, aeb
34.\" Modified Mon Nov 11 14:35:00 PST 2002 by Ben Woodard <ben@zork.net>
d02aa9bc
MK
35.\" 2005-03-11, mtk, modified pselect() text (it is now a system
36.\" call in 2.6.16.
fea681da 37.\"
31a1b45e 38.TH SELECT 2 2017-03-13 "Linux" "Linux Programmer's Manual"
fea681da 39.SH NAME
c13182ef 40select, pselect, FD_CLR, FD_ISSET, FD_SET, FD_ZERO \-
35478399 41synchronous I/O multiplexing
fea681da 42.SH SYNOPSIS
cc9befa9 43.nf
e9419385 44/* According to POSIX.1-2001, POSIX.1-2008 */
fea681da
MK
45.br
46.B #include <sys/select.h>
47.sp
48/* According to earlier standards */
49.br
50.B #include <sys/time.h>
51.br
52.B #include <sys/types.h>
53.br
54.B #include <unistd.h>
55.sp
cc4615cc
MK
56.BI "int select(int " nfds ", fd_set *" readfds ", fd_set *" writefds ,
57.BI " fd_set *" exceptfds ", struct timeval *" timeout );
fea681da 58.sp
071dbad9 59.BI "void FD_CLR(int " fd ", fd_set *" set );
fea681da 60.br
521bf584 61.BI "int FD_ISSET(int " fd ", fd_set *" set );
fea681da 62.br
071dbad9 63.BI "void FD_SET(int " fd ", fd_set *" set );
fea681da 64.br
071dbad9 65.BI "void FD_ZERO(fd_set *" set );
9b813741 66.sp
9b813741
MK
67.B #include <sys/select.h>
68.sp
cc4615cc
MK
69.BI "int pselect(int " nfds ", fd_set *" readfds ", fd_set *" writefds ,
70.BI " fd_set *" exceptfds ", const struct timespec *" timeout ,
71.BI " const sigset_t *" sigmask );
fea681da 72.fi
cc4615cc
MK
73.sp
74.in -4n
75Feature Test Macro Requirements for glibc (see
76.BR feature_test_macros (7)):
77.in
78.sp
79.BR pselect ():
a446ac0c 80_POSIX_C_SOURCE\ >=\ 200112L
fea681da 81.SH DESCRIPTION
e511ffb6 82.BR select ()
fea681da 83and
e511ffb6 84.BR pselect ()
39179b3e 85allow a program to monitor multiple file descriptors,
5e01a1de
MK
86waiting until one or more of the file descriptors become "ready"
87for some class of I/O operation (e.g., input possible).
39179b3e 88A file descriptor is considered ready if it is possible to
d2e7d1bb
RR
89perform a corresponding I/O operation (e.g.,
90.BR read (2)
91without blocking, or a sufficiently small
92.BR write (2)).
fea681da 93.PP
6b6e9185 94.BR select ()
6c345305
MK
95can monitor only file descriptors numbers that are less than
96.BR FD_SETSIZE ;
97.BR poll (2)
6b6e9185 98does not have this limitation.
6c345305 99See BUGS.
6b6e9185 100.PP
5e01a1de
MK
101The operation of
102.BR select ()
103and
104.BR pselect ()
8c1d94ae 105is identical, other than these three differences:
fea681da
MK
106.TP
107(i)
e511ffb6 108.BR select ()
cc9befa9 109uses a timeout that is a
fea681da
MK
110.I struct timeval
111(with seconds and microseconds), while
e511ffb6 112.BR pselect ()
fea681da
MK
113uses a
114.I struct timespec
115(with seconds and nanoseconds).
116.TP
117(ii)
e511ffb6 118.BR select ()
cc9befa9 119may update the
fea681da 120.I timeout
cc9befa9 121argument to indicate how much time was left.
e511ffb6 122.BR pselect ()
cc9befa9 123does not change this argument.
fea681da
MK
124.TP
125(iii)
e511ffb6 126.BR select ()
cc9befa9 127has no
fea681da 128.I sigmask
cc9befa9 129argument, and behaves as
e511ffb6 130.BR pselect ()
fea681da
MK
131called with NULL
132.IR sigmask .
133.PP
c13182ef 134Three independent sets of file descriptors are watched.
22f348ca 135Those listed in
fea681da
MK
136.I readfds
137will be watched to see if characters become
138available for reading (more precisely, to see if a read will not
e9496f74 139block; in particular, a file descriptor is also ready on end-of-file),
fea681da
MK
140those in
141.I writefds
d2e7d1bb
RR
142will be watched to see if space is available for write (though a large
143write may still block), and those in
fea681da 144.I exceptfds
c13182ef
MK
145will be watched for exceptions.
146On exit, the sets are modified in place
22f348ca
MK
147to indicate which file descriptors actually changed status.
148Each of the three file descriptor sets may be specified as NULL
c13182ef 149if no file descriptors are to be watched for the corresponding class
22f348ca 150of events.
fea681da
MK
151.PP
152Four macros are provided to manipulate the sets.
e511ffb6 153.BR FD_ZERO ()
21045df8 154clears a set.
e511ffb6 155.BR FD_SET ()
fea681da 156and
e511ffb6 157.BR FD_CLR ()
22f348ca 158respectively add and remove a given file descriptor from a set.
e511ffb6 159.BR FD_ISSET ()
c13182ef 160tests to see if a file descriptor is part of the set;
22f348ca 161this is useful after
e511ffb6 162.BR select ()
fea681da
MK
163returns.
164.PP
6efed4df 165.I nfds
8b58a9d4
MK
166should be set to the highest-numbered file descriptor in any
167of the three sets, plus 1.
168The indicated file descriptors in each set are checked, up to this limit
169(but see BUGS).
fea681da 170.PP
8c121f40 171The
fea681da 172.I timeout
073f0240 173argument specifies the interval that
e511ffb6 174.BR select ()
8c121f40 175should block waiting for a file descriptor to become ready.
40df3d00
MK
176The call will block until either:
177.IP * 3
178a file descriptor becomes ready;
179.IP *
180the call is interrupted by a signal handler; or
181.IP *
71e7d7f1 182the timeout expires.
40df3d00
MK
183.PP
184Note that the
185.I timeout
186interval will be rounded up to the system clock granularity,
8c121f40 187and kernel scheduling delays mean that the blocking interval
073f0240 188may overrun by a small amount.
485eb4ad
MK
189If both fields of the
190.I timeval
c808bb16 191structure are zero, then
e511ffb6 192.BR select ()
485eb4ad 193returns immediately.
c13182ef
MK
194(This is useful for polling.)
195If
fea681da
MK
196.I timeout
197is NULL (no timeout),
e511ffb6 198.BR select ()
fea681da
MK
199can block indefinitely.
200.PP
201.I sigmask
202is a pointer to a signal mask (see
203.BR sigprocmask (2));
204if it is not NULL, then
e511ffb6 205.BR pselect ()
fea681da
MK
206first replaces the current signal mask by the one pointed to by
207.IR sigmask ,
2d986c92 208then does the "select" function, and then restores the original
cc9befa9 209signal mask.
fea681da 210.PP
d02aa9bc
MK
211Other than the difference in the precision of the
212.I timeout
c13182ef 213argument, the following
d02aa9bc
MK
214.BR pselect ()
215call:
216.nf
217
c13182ef 218 ready = pselect(nfds, &readfds, &writefds, &exceptfds,
d02aa9bc
MK
219 timeout, &sigmask);
220
221.fi
222is equivalent to
223.I atomically
224executing the following calls:
225.nf
226
227 sigset_t origmask;
228
2e72e991 229 pthread_sigmask(SIG_SETMASK, &sigmask, &origmask);
d02aa9bc 230 ready = select(nfds, &readfds, &writefds, &exceptfds, timeout);
2e72e991 231 pthread_sigmask(SIG_SETMASK, &origmask, NULL);
d02aa9bc
MK
232.fi
233.PP
c13182ef 234The reason that
e511ffb6 235.BR pselect ()
d02aa9bc
MK
236is needed is that if one wants to wait for either a signal
237or for a file descriptor to become ready, then
c13182ef 238an atomic test is needed to prevent race conditions.
d02aa9bc 239(Suppose the signal handler sets a global flag and
c13182ef
MK
240returns.
241Then a test of this global flag followed by a call of
fea681da
MK
242.BR select ()
243could hang indefinitely if the signal arrived just after the test
c13182ef 244but just before the call.
d02aa9bc 245By contrast,
e511ffb6 246.BR pselect ()
fea681da
MK
247allows one to first block signals, handle the signals that have come in,
248then call
249.BR pselect ()
250with the desired
251.IR sigmask ,
252avoiding the race.)
73d8cece 253.SS The timeout
fea681da
MK
254The time structures involved are defined in
255.I <sys/time.h>
256and look like
257
088a639b 258.in +4n
fea681da 259.nf
c13182ef 260struct timeval {
fea681da
MK
261 long tv_sec; /* seconds */
262 long tv_usec; /* microseconds */
263};
264.fi
a08ea57c 265.in
fea681da
MK
266
267and
268
088a639b 269.in +4n
fea681da
MK
270.nf
271struct timespec {
272 long tv_sec; /* seconds */
273 long tv_nsec; /* nanoseconds */
274};
275.fi
a08ea57c 276.in
fea681da 277
e9419385 278(However, see below on the POSIX.1 versions.)
fea681da
MK
279.PP
280Some code calls
e511ffb6 281.BR select ()
fea681da 282with all three sets empty,
79b8032e 283.I nfds
22f348ca 284zero, and a non-NULL
fea681da
MK
285.I timeout
286as a fairly portable way to sleep with subsecond precision.
287.PP
c13182ef 288On Linux,
e511ffb6 289.BR select ()
fea681da
MK
290modifies
291.I timeout
292to reflect the amount of time not slept; most other implementations
77f00d75 293do not do this.
e9419385 294(POSIX.1 permits either behavior.)
77f00d75 295This causes problems both when Linux code which reads
fea681da
MK
296.I timeout
297is ported to other operating systems, and when code is ported to Linux
0c2ec4f1 298that reuses a \fIstruct timeval\fP for multiple
e511ffb6 299.BR select ()s
c13182ef
MK
300in a loop without reinitializing it.
301Consider
fea681da
MK
302.I timeout
303to be undefined after
e511ffb6 304.BR select ()
fea681da 305returns.
d9bfdb9c 306.\" .PP - it is rumored that:
fea681da
MK
307.\" On BSD, when a timeout occurs, the file descriptor bits are not changed.
308.\" - it is certainly true that:
309.\" Linux follows SUSv2 and sets the bit masks to zero upon a timeout.
47297adb 310.SH RETURN VALUE
fea681da 311On success,
e511ffb6 312.BR select ()
fea681da 313and
e511ffb6 314.BR pselect ()
22f348ca
MK
315return the number of file descriptors contained in the three returned
316descriptor sets (that is, the total number of bits that are set in
fea681da
MK
317.IR readfds ,
318.IR writefds ,
319.IR exceptfds )
320which may be zero if the timeout expires before anything interesting happens.
321On error, \-1 is returned, and
322.I errno
8dc33675
MK
323is set to indicate the error;
324the file descriptor sets are unmodified,
325and
fea681da 326.I timeout
8dc33675 327becomes undefined.
fea681da
MK
328.SH ERRORS
329.TP
330.B EBADF
331An invalid file descriptor was given in one of the sets.
c13182ef 332(Perhaps a file descriptor that was already closed,
6efed4df 333or one on which an error has occurred.)
8b58a9d4 334However, see BUGS.
fea681da
MK
335.TP
336.B EINTR
01538d0d
MK
337A signal was caught; see
338.BR signal (7).
fea681da
MK
339.TP
340.B EINVAL
6efed4df 341.I nfds
b9ebc9b7
MK
342is negative or exceeds the
343.BR RLIMIT_NOFILE
344resource limit (see
345.BR getrlimit (2)).
346.TP
347.B EINVAL
02959ce2 348The value contained within
fea681da
MK
349.I timeout
350is invalid.
351.TP
352.B ENOMEM
02959ce2 353Unable to allocate memory for internal tables.
a1d5f77c
MK
354.SH VERSIONS
355.BR pselect ()
356was added to Linux in kernel 2.6.16.
357Prior to this,
358.BR pselect ()
359was emulated in glibc (but see BUGS).
47297adb 360.SH CONFORMING TO
c13182ef 361.BR select ()
e9419385 362conforms to POSIX.1-2001, POSIX.1-2008, and
c13182ef 3634.4BSD
cc9befa9 364.RB ( select ()
c13182ef
MK
365first appeared in 4.2BSD).
366Generally portable to/from
fea681da 367non-BSD systems supporting clones of the BSD socket layer (including
efbfd7ec
MK
368System\ V variants).
369However, note that the System\ V variant typically
fea681da
MK
370sets the timeout variable before exit, but the BSD variant does not.
371.PP
e511ffb6 372.BR pselect ()
97c1eac8 373is defined in POSIX.1g, and in
e9419385 374POSIX.1-2001 and POSIX.1-2008.
fea681da 375.SH NOTES
c13182ef
MK
376An
377.I fd_set
378is a fixed size buffer.
379Executing
22f348ca 380.BR FD_CLR ()
c13182ef 381or
22f348ca
MK
382.BR FD_SET ()
383with a value of
fea681da 384.I fd
682edefb
MK
385that is negative or is equal to or larger than
386.B FD_SETSIZE
387will result
c13182ef
MK
388in undefined behavior.
389Moreover, POSIX requires
fea681da
MK
390.I fd
391to be a valid file descriptor.
392
20cc8fa8
MK
393On some other UNIX systems,
394.\" Darwin, according to a report by Jeremy Sequoia, relayed by Josh Triplett
395.BR select ()
396can fail with the error
397.B EAGAIN
398if the system fails to allocate kernel-internal resources, rather than
399.B ENOMEM
400as Linux does.
401POSIX specifies this error for
402.BR poll (2),
403but not for
404.BR select ().
405Portable programs may wish to check for
406.B EAGAIN
407and loop, just as with
408.BR EINTR .
409
3116bbe0
MK
410On systems that lack
411.BR pselect (),
412reliable (and more portable) signal trapping can be achieved
413using the self-pipe trick.
414In this technique,
415a signal handler writes a byte to a pipe whose other end
416is monitored by
417.BR select ()
418in the main program.
419(To avoid possibly blocking when writing to a pipe that may be full
420or reading from a pipe that may be empty,
421nonblocking I/O is used when reading from and writing to the pipe.)
422
fea681da 423Concerning the types involved, the classical situation is that
22f348ca 424the two fields of a
c13182ef 425.I timeval
e3e25559
MK
426structure are typed as
427.I long
428(as shown above), and the structure is defined in
fea681da 429.IR <sys/time.h> .
e9419385 430The POSIX.1 situation is
fea681da 431
088a639b 432.in +4n
fea681da
MK
433.nf
434struct timeval {
435 time_t tv_sec; /* seconds */
436 suseconds_t tv_usec; /* microseconds */
437};
438.fi
a08ea57c 439.in
fea681da 440
22f348ca 441where the structure is defined in
fea681da 442.I <sys/select.h>
c13182ef
MK
443and the data types
444.I time_t
445and
446.I suseconds_t
22f348ca 447are defined in
fea681da
MK
448.IR <sys/types.h> .
449.LP
450Concerning prototypes, the classical situation is that one should
451include
452.I <time.h>
453for
e511ffb6 454.BR select ().
e9419385 455The POSIX.1 situation is that one should include
fea681da
MK
456.I <sys/select.h>
457for
e511ffb6 458.BR select ()
fea681da 459and
e511ffb6 460.BR pselect ().
8b98e6fc 461
083e5b2f
MK
462Under glibc 2.0,
463.I <sys/select.h>
464gives the wrong prototype for
8b98e6fc 465.BR pselect ().
565ee767 466Under glibc 2.1 to 2.2.1, it gives
e511ffb6 467.BR pselect ()
fea681da
MK
468when
469.B _GNU_SOURCE
8b98e6fc 470is defined.
565ee767 471Since glibc 2.2.2, the requirements are as shown in the SYNOPSIS.
10ed041e
MK
472.SS Multithreaded applications
473If a file descriptor being monitored by
474.BR select ()
475is closed in another thread, the result is unspecified.
476On some UNIX systems,
477.BR select ()
478unblocks and returns, with an indication that the file descriptor is ready
479(a subsequent I/O operation will likely fail with an error,
480unless another the file descriptor reopened between the time
481.BR select ()
482returned and the I/O operations was performed).
483On Linux (and some other systems),
484closing the file descriptor in another thread has no effect on
485.BR select ().
486In summary, any application that relies on a particular behavior
487in this scenario must be considered buggy.
17ec2d27 488.\"
0722a578 489.SS C library/kernel differences
6c345305
MK
490The Linux kernel allows file descriptor sets of arbitrary size,
491determining the length of the sets to be checked from the value of
492.IR nfds .
493However, in the glibc implementation, the
494.IR fd_set
495type is fixed in size.
496See also BUGS.
497
a16eec1e 498The
77f00d75 499.BR pselect ()
a16eec1e
MK
500interface described in this page is implemented by glibc.
501The underlying Linux system call is named
502.BR pselect6 ().
a59e64be 503This system call has somewhat different behavior from the glibc
a16eec1e
MK
504wrapper function.
505
506The Linux
507.BR pselect6 ()
c13182ef
MK
508system call modifies its
509.I timeout
2f11acf5 510argument.
d9bfdb9c 511However, the glibc wrapper function hides this behavior
77f00d75
MK
512by using a local variable for the timeout argument that
513is passed to the system call.
c13182ef 514Thus, the glibc
77f00d75 515.BR pselect ()
d53de2a7
MK
516function does not modify its
517.I timeout
518argument;
d9bfdb9c 519this is the behavior required by POSIX.1-2001.
a16eec1e
MK
520
521The final argument of the
02ace852 522.BR pselect6 ()
0ab8aeec 523system call is not a
a16eec1e
MK
524.I "sigset_t\ *"
525pointer, but is instead a structure of the form:
526.in +4
527.nf
528
529struct {
1a116ea0
MK
530 const kernel_sigset_t *ss; /* Pointer to signal set */
531 size_t ss_len; /* Size (in bytes) of object
532 pointed to by 'ss' */
a16eec1e
MK
533};
534
535.fi
536.in
537This allows the system call to obtain both
538a pointer to the signal set and its size,
539while allowing for the fact that most architectures
f8dcca84
MK
540support a maximum of 6 arguments to a system call.
541See
542.BR sigprocmask (2)
f25ea51b
N
543for a discussion of the difference between the kernel and libc
544notion of the signal set.
fea681da 545.SH BUGS
6c345305
MK
546POSIX allows an implementation to define an upper limit,
547advertised via the constant
548.BR FD_SETSIZE ,
549on the range of file descriptors that can be specified
550in a file descriptor set.
551The Linux kernel imposes no fixed limit, but the glibc implementation makes
552.IR fd_set
553a fixed-size type, with
554.BR FD_SETSIZE
555defined as 1024, and the
556.BR FD_* ()
557macros operating according to that limit.
558To monitor file descriptors greater than 1023, use
559.BR poll (2)
560instead.
561
8b58a9d4
MK
562According to POSIX,
563.BR select ()
564should check all specified file descriptors in the three file descriptor sets,
565up to the limit
566.IR nfds\-1 .
567However, the current implementation ignores any file descriptor in
568these sets that is greater than the maximum file descriptor number
569that the process currently has open.
570According to POSIX, any such file descriptor that is specified in one
571of the sets should result in the error
572.BR EBADF .
573
cc9befa9 574Glibc 2.0 provided a version of
e511ffb6 575.BR pselect ()
c13182ef
MK
576that did not take a
577.I sigmask
cc9befa9
MK
578argument.
579
3fa2e4b9 580Starting with version 2.1, glibc provided an emulation of
c13182ef 581.BR pselect ()
3fa2e4b9 582that was implemented using
cc9befa9
MK
583.BR sigprocmask (2)
584and
585.BR select ().
3fa2e4b9 586This implementation remained vulnerable to the very race condition that
cc9befa9
MK
587.BR pselect ()
588was designed to prevent.
3fa2e4b9
MK
589Modern versions of glibc use the (race-free)
590.BR pselect ()
591system call on kernels where it is provided.
592
fea681da 593Under Linux,
e511ffb6 594.BR select ()
fea681da 595may report a socket file descriptor as "ready for reading", while
c13182ef
MK
596nevertheless a subsequent read blocks.
597This could for example
fea681da 598happen when data has arrived but upon examination has wrong
c13182ef
MK
599checksum and is discarded.
600There may be other circumstances
2f11acf5 601in which a file descriptor is spuriously reported as ready.
fea681da
MK
602.\" Stevens discusses a case where accept can block after select
603.\" returns successfully because of an intervening RST from the client.
682edefb
MK
604Thus it may be safer to use
605.B O_NONBLOCK
606on sockets that should not block.
fea681da 607.\" Maybe the kernel should have returned EIO in such a situation?
5766b196
MK
608
609On Linux,
610.BR select ()
611also modifies
612.I timeout
613if the call is interrupted by a signal handler (i.e., the
614.B EINTR
615error return).
e9419385 616This is not permitted by POSIX.1.
5766b196 617The Linux
2777b1ca 618.BR pselect ()
5766b196
MK
619system call has the same behavior,
620but the glibc wrapper hides this behavior by internally copying the
621.I timeout
622to a local variable and passing that variable to the system call.
2b2581ee
MK
623.SH EXAMPLE
624.nf
625#include <stdio.h>
af9c7ff2 626#include <stdlib.h>
2b2581ee
MK
627#include <sys/time.h>
628#include <sys/types.h>
629#include <unistd.h>
630
631int
632main(void)
633{
634 fd_set rfds;
635 struct timeval tv;
636 int retval;
637
638 /* Watch stdin (fd 0) to see when it has input. */
887f19e8 639
2b2581ee
MK
640 FD_ZERO(&rfds);
641 FD_SET(0, &rfds);
642
643 /* Wait up to five seconds. */
887f19e8 644
2b2581ee
MK
645 tv.tv_sec = 5;
646 tv.tv_usec = 0;
647
648 retval = select(1, &rfds, NULL, NULL, &tv);
649 /* Don't rely on the value of tv now! */
650
651 if (retval == \-1)
652 perror("select()");
653 else if (retval)
654 printf("Data is available now.\\n");
655 /* FD_ISSET(0, &rfds) will be true. */
656 else
657 printf("No data within five seconds.\\n");
658
659 exit(EXIT_SUCCESS);
660}
661.fi
47297adb 662.SH SEE ALSO
fea681da
MK
663.BR accept (2),
664.BR connect (2),
665.BR poll (2),
666.BR read (2),
667.BR recv (2),
25a7bfe6 668.BR restart_syscall (2),
fea681da
MK
669.BR send (2),
670.BR sigprocmask (2),
50e5322c 671.BR write (2),
1d7c4d16
MK
672.BR epoll (7),
673.BR time (7)
173fe7e7
DP
674
675For a tutorial with discussion and examples, see
676.BR select_tut (2).