Annotation of 43BSDReno/lib/libc/sys/select.2, revision 1.1

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

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.