|
|
1.1 root 1: .\" Copyright (c) 1983 Regents of the University of California.
2: .\" All rights reserved. The Berkeley software License Agreement
3: .\" specifies the terms and conditions for redistribution.
4: .\"
5: .\" @(#)select.2 6.5 (Berkeley) 5/15/86
6: .\"
7: .TH SELECT 2 "May 15, 1986"
8: .UC 5
9: .SH NAME
10: select \- synchronous I/O multiplexing
11: .SH SYNOPSIS
12: .nf
13: .ft B
14: #include <sys/types.h>
15: #include <sys/time.h>
16: .PP
17: .ft B
18: nfound = select(nfds, readfds, writefds, exceptfds, timeout)
19: int nfound, nfds;
20: fd_set *readfds, *writefds, *exceptfds;
21: struct timeval *timeout;
22: .PP
23: .ft B
24: FD_SET(fd, &fdset)
25: FD_CLR(fd, &fdset)
26: FD_ISSET(fd, &fdset)
27: FD_ZERO(&fdset)
28: int fd;
29: fd_set fdset;
30: .fi
31: .SH DESCRIPTION
32: .I Select
33: examines the I/O descriptor sets whose addresses are passed in
34: .IR readfds ,
35: .IR writefds ,
36: and
37: .I exceptfds
38: to see if some of their descriptors
39: are ready for reading, are ready for writing, or have an exceptional
40: condition pending, respectively.
41: The first
42: .I nfds
43: descriptors are checked in each set;
44: i.e. the descriptors from 0 through
45: .IR nfds -1
46: in the descriptor sets are examined.
47: On return,
48: .I select
49: replaces the given descriptor sets
50: with subsets consisting of those descriptors that are ready
51: for the requested operation.
52: The total number of ready descriptors in all the sets is returned in
53: .IR nfound .
54: .PP
55: The descriptor sets are stored as bit fields in arrays of integers.
56: The following macros are provided for manipulating such descriptor sets:
57: .I "FD_ZERO(&fdset)"
58: initializes a descriptor set
59: .I fdset
60: to the null set.
61: .I "FD_SET(fd, &fdset)"
62: includes a particular descriptor
63: .I fd
64: in
65: .IR fdset .
66: .I "FD_CLR(fd, &fdset)"
67: removes
68: .I fd
69: from
70: .IR fdset .
71: .I "FD_ISSET(fd, &fdset)"
72: is nonzero if
73: .I fd
74: is a member of
75: .IR fdset ,
76: zero otherwise.
77: The behavior of these macros is undefined if
78: a descriptor value is less than zero or greater than or equal to
79: .IR FD_SETSIZE ,
80: which is normally at least equal
81: to the maximum number of descriptors supported by the system.
82: .PP
83: If
84: .I timeout
85: is a non-zero pointer, it specifies a maximum interval to wait for the
86: selection to complete. If
87: .I timeout
88: is a zero pointer, the select blocks indefinitely. To affect a poll, the
89: .I timeout
90: argument should be non-zero, pointing to a zero-valued timeval structure.
91: .PP
92: Any of
93: .IR readfds ,
94: .IR writefds ,
95: and
96: .I exceptfds
97: may be given as zero pointers if no descriptors are of interest.
98: .SH "RETURN VALUE
99: .I Select
100: returns the number of ready descriptors that are contained in
101: the descriptor sets,
102: or \-1 if an error occurred.
103: If the time limit expires then
104: .I select
105: returns 0.
106: If
107: .I select
108: returns with an error,
109: including one due to an interrupted call,
110: the descriptor sets will be unmodified.
111: .SH "ERRORS
112: An error return from \fIselect\fP indicates:
113: .TP 15
114: [EBADF]
115: One of the descriptor sets specified an invalid descriptor.
116: .TP 15
117: [EINTR]
118: A signal was delivered before the time limit expired and
119: before any of the selected events occurred.
120: .TP 15
121: [EINVAL]
122: The specified time limit is invalid. One of its components is
123: negative or too large.
124: .SH SEE ALSO
125: accept(2), connect(2), read(2), write(2), recv(2), send(2), getdtablesize(2)
126: .SH BUGS
127: Although the provision of
128: .IR getdtablesize (2)
129: was intended to allow user programs to be written independent
130: of the kernel limit on the number of open files, the dimension
131: of a sufficiently large bit field for select remains a problem.
132: The default size FD_SETSIZE (currently 256) is somewhat larger than
133: the current kernel limit to the number of open files.
134: However, in order to accommodate programs which might potentially
135: use a larger number of open files with select, it is possible
136: to increase this size within a program by providing
137: a larger definition of FD_SETSIZE before the inclusion of <sys/types.h>.
138: .PP
139: .I Select
140: should probably return the time remaining from the original timeout,
141: if any, by modifying the time value in place.
142: This may be implemented in future versions of the system.
143: Thus, it is unwise to assume that the timeout value will be unmodified
144: by the
145: .I select
146: call.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.