summaryrefslogtreecommitdiffstats
path: root/man3p/select.3p
diff options
context:
space:
mode:
Diffstat (limited to 'man3p/select.3p')
-rw-r--r--man3p/select.3p318
1 files changed, 318 insertions, 0 deletions
diff --git a/man3p/select.3p b/man3p/select.3p
new file mode 100644
index 000000000..3df0205db
--- /dev/null
+++ b/man3p/select.3p
@@ -0,0 +1,318 @@
+.\" Copyright (c) 2001-2003 The Open Group, All Rights Reserved
+.TH "PSELECT" P 2003 "IEEE/The Open Group" "POSIX Programmer's Manual"
+.\" pselect
+.SH NAME
+pselect, select \- synchronous I/O multiplexing
+.SH SYNOPSIS
+.LP
+\fB#include <sys/select.h>
+.br
+.sp
+int pselect(int\fP \fInfds\fP\fB, fd_set *restrict\fP \fIreadfds\fP\fB,
+.br
+\ \ \ \ \ \ fd_set *restrict\fP \fIwritefds\fP\fB, fd_set *restrict\fP
+\fIerrorfds\fP\fB,
+.br
+\ \ \ \ \ \ const struct timespec *restrict\fP \fItimeout\fP\fB,
+.br
+\ \ \ \ \ \ const sigset_t *restrict\fP \fIsigmask\fP\fB);
+.br
+int select(int\fP \fInfds\fP\fB, fd_set *restrict\fP \fIreadfds\fP\fB,
+.br
+\ \ \ \ \ \ fd_set *restrict\fP \fIwritefds\fP\fB, fd_set *restrict\fP
+\fIerrorfds\fP\fB,
+.br
+\ \ \ \ \ \ struct timeval *restrict\fP \fItimeout\fP\fB);
+.br
+void FD_CLR(int\fP \fIfd\fP\fB, fd_set *\fP\fIfdset\fP\fB);
+.br
+int FD_ISSET(int\fP \fIfd\fP\fB, fd_set *\fP\fIfdset\fP\fB);
+.br
+void FD_SET(int\fP \fIfd\fP\fB, fd_set *\fP\fIfdset\fP\fB);
+.br
+void FD_ZERO(fd_set *\fP\fIfdset\fP\fB);
+.br
+\fP
+.SH DESCRIPTION
+.LP
+The \fIpselect\fP() function shall examine the file descriptor sets
+whose addresses are passed in the \fIreadfds\fP,
+\fIwritefds\fP, and \fIerrorfds\fP parameters to see whether some
+of their descriptors are ready for reading, are ready for
+writing, or have an exceptional condition pending, respectively.
+.LP
+The \fIselect\fP() function shall be equivalent to the \fIpselect\fP()
+function, except as follows:
+.IP " *" 3
+For the \fIselect\fP() function, the timeout period is given in seconds
+and microseconds in an argument of type \fBstruct
+timeval\fP, whereas for the \fIpselect\fP() function the timeout period
+is given in seconds and nanoseconds in an argument of
+type \fBstruct timespec\fP.
+.LP
+.IP " *" 3
+The \fIselect\fP() function has no \fIsigmask\fP argument; it shall
+behave as \fIpselect\fP() does when \fIsigmask\fP is a
+null pointer.
+.LP
+.IP " *" 3
+Upon successful completion, the \fIselect\fP() function may modify
+the object pointed to by the \fItimeout\fP argument.
+.LP
+.LP
+The \fIpselect\fP() and \fIselect\fP() functions shall support regular
+files, terminal and pseudo-terminal devices,
+\ STREAMS-based files, FIFOs, pipes, and sockets. The behavior
+of \fIpselect\fP() and \fIselect\fP() on file descriptors that refer
+to other types of file is unspecified.
+.LP
+The \fInfds\fP argument specifies the range of descriptors to be tested.
+The first \fInfds\fP descriptors shall be checked in
+each set; that is, the descriptors from zero through \fInfds\fP-1
+in the descriptor sets shall be examined.
+.LP
+If the \fIreadfds\fP argument is not a null pointer, it points to
+an object of type \fBfd_set\fP that on input specifies the
+file descriptors to be checked for being ready to read, and on output
+indicates which file descriptors are ready to read.
+.LP
+If the \fIwritefds\fP argument is not a null pointer, it points to
+an object of type \fBfd_set\fP that on input specifies the
+file descriptors to be checked for being ready to write, and on output
+indicates which file descriptors are ready to write.
+.LP
+If the \fIerrorfds\fP argument is not a null pointer, it points to
+an object of type \fBfd_set\fP that on input specifies the
+file descriptors to be checked for error conditions pending, and on
+output indicates which file descriptors have error conditions
+pending.
+.LP
+Upon successful completion, the \fIpselect\fP() or \fIselect\fP()
+function shall modify the objects pointed to by the
+\fIreadfds\fP, \fIwritefds\fP, and \fIerrorfds\fP arguments to indicate
+which file descriptors are ready for reading, ready for
+writing, or have an error condition pending, respectively, and shall
+return the total number of ready descriptors in all the output
+sets. For each file descriptor less than \fInfds\fP, the corresponding
+bit shall be set on successful completion if it was set on
+input and the associated condition is true for that file descriptor.
+.LP
+If none of the selected descriptors are ready for the requested operation,
+the \fIpselect\fP() or \fIselect\fP() function
+shall block until at least one of the requested operations becomes
+ready, until the \fItimeout\fP occurs, or until interrupted by
+a signal. The \fItimeout\fP parameter controls how long the \fIpselect\fP()
+or \fIselect\fP() function shall take before timing
+out. If the \fItimeout\fP parameter is not a null pointer, it specifies
+a maximum interval to wait for the selection to complete.
+If the specified time interval expires without any requested operation
+becoming ready, the function shall return. If the
+\fItimeout\fP parameter is a null pointer, then the call to \fIpselect\fP()
+or \fIselect\fP() shall block indefinitely until at
+least one descriptor meets the specified criteria. To effect a poll,
+the \fItimeout\fP parameter should not be a null pointer, and
+should point to a zero-valued \fBtimespec\fP structure.
+.LP
+The use of a timeout does not affect any pending timers set up by
+\fIalarm\fP(), \fIualarm\fP(), or \fIsetitimer\fP().
+.LP
+Implementations may place limitations on the maximum timeout interval
+supported. All implementations shall support a maximum
+timeout interval of at least 31 days. If the \fItimeout\fP argument
+specifies a timeout interval greater than the
+implementation-defined maximum value, the maximum value shall be used
+as the actual timeout value. Implementations may also place
+limitations on the granularity of timeout intervals. If the requested
+timeout interval requires a finer granularity than the
+implementation supports, the actual timeout interval shall be rounded
+up to the next supported value.
+.LP
+If \fIsigmask\fP is not a null pointer, then the \fIpselect\fP() function
+shall replace the signal mask of the process by the
+set of signals pointed to by \fIsigmask\fP before examining the descriptors,
+and shall restore the signal mask of the process
+before returning.
+.LP
+A descriptor shall be considered ready for reading when a call to
+an input function with O_NONBLOCK clear would not block,
+whether or not the function would transfer data successfully. (The
+function might return data, an end-of-file indication, or an
+error other than one indicating that it is blocked, and in each of
+these cases the descriptor shall be considered ready for
+reading.)
+.LP
+A descriptor shall be considered ready for writing when a call to
+an output function with O_NONBLOCK clear would not block,
+whether or not the function would transfer data successfully.
+.LP
+If a socket has a pending error, it shall be considered to have an
+exceptional condition pending. Otherwise, what constitutes an
+exceptional condition is file type-specific. For a file descriptor
+for use with a socket, it is protocol-specific except as noted
+below. For other file types it is implementation-defined. If the operation
+is meaningless for a particular file type,
+\fIpselect\fP() or \fIselect\fP() shall indicate that the descriptor
+is ready for read or write operations, and shall indicate
+that the descriptor has no exceptional condition pending.
+.LP
+If a descriptor refers to a socket, the implied input function is
+the \fIrecvmsg\fP()
+function with parameters requesting normal and ancillary data, such
+that the presence of either type shall cause the socket to be
+marked as readable. The presence of out-of-band data shall be checked
+if the socket option SO_OOBINLINE has been enabled, as
+out-of-band data is enqueued with normal data. If the socket is currently
+listening, then it shall be marked as readable if an
+incoming connection request has been received, and a call to the \fIaccept\fP()
+function
+shall complete without blocking.
+.LP
+If a descriptor refers to a socket, the implied output function is
+the \fIsendmsg\fP()
+function supplying an amount of normal data equal to the current value
+of the SO_SNDLOWAT option for the socket. If a non-blocking
+call to the \fIconnect\fP() function has been made for a socket, and
+the connection
+attempt has either succeeded or failed leaving a pending error, the
+socket shall be marked as writable.
+.LP
+A socket shall be considered to have an exceptional condition pending
+if a receive operation with O_NONBLOCK clear for the open
+file description and with the MSG_OOB flag set would return out-of-band
+data without blocking. (It is protocol-specific whether the
+MSG_OOB flag would be used to read out-of-band data.) A socket shall
+also be considered to have an exceptional condition pending if
+an out-of-band data mark is present in the receive queue. Other circumstances
+under which a socket may be considered to have an
+exceptional condition pending are protocol-specific and implementation-defined.
+.LP
+If the \fIreadfds\fP, \fIwritefds\fP, and \fIerrorfds\fP arguments
+are all null pointers and the \fItimeout\fP argument is
+not a null pointer, the \fIpselect\fP() or \fIselect\fP() function
+shall block for the time specified, or until interrupted by a
+signal. If the \fIreadfds\fP, \fIwritefds\fP, and \fIerrorfds\fP arguments
+are all null pointers and the \fItimeout\fP argument
+is a null pointer, the \fIpselect\fP() or \fIselect\fP() function
+shall block until interrupted by a signal.
+.LP
+File descriptors associated with regular files shall always select
+true for ready to read, ready to write, and error
+conditions.
+.LP
+On failure, the objects pointed to by the \fIreadfds\fP, \fIwritefds\fP,
+and \fIerrorfds\fP arguments shall not be modified.
+If the timeout interval expires without the specified condition being
+true for any of the specified file descriptors, the objects
+pointed to by the \fIreadfds\fP, \fIwritefds\fP, and \fIerrorfds\fP
+arguments shall have all bits set to 0.
+.LP
+File descriptor masks of type \fBfd_set\fP can be initialized and
+tested with \fIFD_CLR\fP(), \fIFD_ISSET\fP(),
+\fIFD_SET\fP(), and \fIFD_ZERO\fP(). It is unspecified whether each
+of these is a macro or a function. If a macro definition is
+suppressed in order to access an actual function, or a program defines
+an external identifier with any of these names, the behavior
+is undefined.
+.LP
+\fIFD_CLR\fP(\fIfd\fP, \fIfdsetp\fP) shall remove the file descriptor
+\fIfd\fP from the set pointed to by \fIfdsetp\fP. If
+\fIfd\fP is not a member of this set, there shall be no effect on
+the set, nor will an error be returned.
+.LP
+\fIFD_ISSET\fP(\fIfd\fP, \fIfdsetp\fP) shall evaluate to non-zero
+if the file descriptor \fIfd\fP is a member of the set
+pointed to by \fIfdsetp\fP, and shall evaluate to zero otherwise.
+.LP
+\fIFD_SET\fP(\fIfd\fP, \fIfdsetp\fP) shall add the file descriptor
+\fIfd\fP to the set pointed to by \fIfdsetp\fP. If the
+file descriptor \fIfd\fP is already in this set, there shall be no
+effect on the set, nor will an error be returned.
+.LP
+\fIFD_ZERO\fP(\fIfdsetp\fP) shall initialize the descriptor set pointed
+to by \fIfdsetp\fP to the null set. No error is
+returned if the set is not empty at the time \fIFD_ZERO\fP() is invoked.
+.LP
+The behavior of these macros is undefined if the \fIfd\fP argument
+is less than 0 or greater than or equal to FD_SETSIZE, or if
+\fIfd\fP is not a valid file descriptor, or if any of the arguments
+are expressions with side effects.
+.SH RETURN VALUE
+.LP
+Upon successful completion, the \fIpselect\fP() and \fIselect\fP()
+functions shall return the total number of bits set in the
+bit masks. Otherwise, -1 shall be returned, and \fIerrno\fP shall
+be set to indicate the error.
+.LP
+\fIFD_CLR\fP(), \fIFD_SET\fP(), and \fIFD_ZERO\fP() do not return
+a value. \fIFD_ISSET\fP() shall return a non-zero value if
+the bit for the file descriptor \fIfd\fP is set in the file descriptor
+set pointed to by \fIfdset\fP, and 0 otherwise.
+.SH ERRORS
+.LP
+Under the following conditions, \fIpselect\fP() and \fIselect\fP()
+shall fail and set \fIerrno\fP to:
+.TP 7
+.B EBADF
+One or more of the file descriptor sets specified a file descriptor
+that is not a valid open file descriptor.
+.TP 7
+.B EINTR
+The function was interrupted before any of the selected events occurred
+and before the timeout interval expired.
+.LP
+If SA_RESTART has been set for the interrupting signal, it is implementation-defined
+whether the function restarts or returns with
+[EINTR].
+.TP 7
+.B EINVAL
+An invalid timeout interval was specified.
+.TP 7
+.B EINVAL
+The \fInfds\fP argument is less than 0 or greater than FD_SETSIZE.
+.TP 7
+.B EINVAL
+One of the specified file descriptors refers to a STREAM or multiplexer
+that is linked (directly or indirectly) downstream from a
+multiplexer.
+.sp
+.LP
+\fIThe following sections are informative.\fP
+.SH EXAMPLES
+.LP
+None.
+.SH APPLICATION USAGE
+.LP
+None.
+.SH RATIONALE
+.LP
+In previous versions of the Single UNIX Specification, the \fIselect\fP()
+function was defined in the \fI<sys/time.h>\fP header. This is now
+changed to \fI<sys/select.h>\fP. The rationale for this change was
+as follows: the introduction of
+the \fIpselect\fP() function included the \fI<sys/select.h>\fP header
+and the
+\fI<sys/select.h>\fP header defines all the related definitions for
+the
+\fIpselect\fP() and \fIselect\fP() functions. Backwards-compatibility
+to existing XSI implementations is handled by allowing \fI<sys/time.h>\fP
+to include \fI<sys/select.h>\fP.
+.SH FUTURE DIRECTIONS
+.LP
+None.
+.SH SEE ALSO
+.LP
+\fIaccept\fP() , \fIalarm\fP() , \fIconnect\fP() , \fIfcntl\fP() ,
+\fIpoll\fP() , \fIread\fP() , \fIrecvmsg\fP() , \fIsendmsg\fP() ,
+\fIsetitimer\fP() , \fIualarm\fP() , \fIwrite\fP()
+, the Base Definitions volume of IEEE\ Std\ 1003.1-2001, \fI<sys/select.h>\fP,
+\fI<sys/time.h>\fP
+.SH COPYRIGHT
+Portions of this text are reprinted and reproduced in electronic form
+from IEEE Std 1003.1, 2003 Edition, Standard for Information Technology
+-- Portable Operating System Interface (POSIX), The Open Group Base
+Specifications Issue 6, Copyright (C) 2001-2003 by the Institute of
+Electrical and Electronics Engineers, Inc and The Open Group. In the
+event of any discrepancy between this version and the original IEEE and
+The Open Group Standard, the original IEEE and The Open Group Standard
+is the referee document. The original Standard can be obtained online at
+http://www.opengroup.org/unix/online.html .