OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [rtos/] [ecos-2.0/] [doc/] [html/] [ref/] [net-common-tcpip-manpages-select.html] - Diff between revs 28 and 174

Go to most recent revision | Only display areas with differences | Details | Blame | View Log

Rev 28 Rev 174
<!-- Copyright (C) 2003 Red Hat, Inc.                                -->
<!-- Copyright (C) 2003 Red Hat, Inc.                                -->
<!-- This material may be distributed only subject to the terms      -->
<!-- This material may be distributed only subject to the terms      -->
<!-- and conditions set forth in the Open Publication License, v1.0  -->
<!-- and conditions set forth in the Open Publication License, v1.0  -->
<!-- or later (the latest version is presently available at          -->
<!-- or later (the latest version is presently available at          -->
<!-- http://www.opencontent.org/openpub/).                           -->
<!-- http://www.opencontent.org/openpub/).                           -->
<!-- Distribution of the work or derivative of the work in any       -->
<!-- Distribution of the work or derivative of the work in any       -->
<!-- standard (paper) book form is prohibited unless prior           -->
<!-- standard (paper) book form is prohibited unless prior           -->
<!-- permission is obtained from the copyright holder.               -->
<!-- permission is obtained from the copyright holder.               -->
<HTML
<HTML
><HEAD
><HEAD
><TITLE
><TITLE
>select</TITLE
>select</TITLE
><meta name="MSSmartTagsPreventParsing" content="TRUE">
><meta name="MSSmartTagsPreventParsing" content="TRUE">
<META
<META
NAME="GENERATOR"
NAME="GENERATOR"
CONTENT="Modular DocBook HTML Stylesheet Version 1.76b+
CONTENT="Modular DocBook HTML Stylesheet Version 1.76b+
"><LINK
"><LINK
REL="HOME"
REL="HOME"
TITLE="eCos Reference Manual"
TITLE="eCos Reference Manual"
HREF="ecos-ref.html"><LINK
HREF="ecos-ref.html"><LINK
REL="UP"
REL="UP"
TITLE="TCP/IP Library Reference"
TITLE="TCP/IP Library Reference"
HREF="tcpip-library-reference.html"><LINK
HREF="tcpip-library-reference.html"><LINK
REL="PREVIOUS"
REL="PREVIOUS"
TITLE="poll"
TITLE="poll"
HREF="net-common-tcpip-manpages-poll.html"><LINK
HREF="net-common-tcpip-manpages-poll.html"><LINK
REL="NEXT"
REL="NEXT"
TITLE="send"
TITLE="send"
HREF="net-common-tcpip-manpages-send.html"></HEAD
HREF="net-common-tcpip-manpages-send.html"></HEAD
><BODY
><BODY
CLASS="SECT1"
CLASS="SECT1"
BGCOLOR="#FFFFFF"
BGCOLOR="#FFFFFF"
TEXT="#000000"
TEXT="#000000"
LINK="#0000FF"
LINK="#0000FF"
VLINK="#840084"
VLINK="#840084"
ALINK="#0000FF"
ALINK="#0000FF"
><DIV
><DIV
CLASS="NAVHEADER"
CLASS="NAVHEADER"
><TABLE
><TABLE
SUMMARY="Header navigation table"
SUMMARY="Header navigation table"
WIDTH="100%"
WIDTH="100%"
BORDER="0"
BORDER="0"
CELLPADDING="0"
CELLPADDING="0"
CELLSPACING="0"
CELLSPACING="0"
><TR
><TR
><TH
><TH
COLSPAN="3"
COLSPAN="3"
ALIGN="center"
ALIGN="center"
>eCos Reference Manual</TH
>eCos Reference Manual</TH
></TR
></TR
><TR
><TR
><TD
><TD
WIDTH="10%"
WIDTH="10%"
ALIGN="left"
ALIGN="left"
VALIGN="bottom"
VALIGN="bottom"
><A
><A
HREF="net-common-tcpip-manpages-poll.html"
HREF="net-common-tcpip-manpages-poll.html"
ACCESSKEY="P"
ACCESSKEY="P"
>Prev</A
>Prev</A
></TD
></TD
><TD
><TD
WIDTH="80%"
WIDTH="80%"
ALIGN="center"
ALIGN="center"
VALIGN="bottom"
VALIGN="bottom"
>Chapter 38. TCP/IP Library Reference</TD
>Chapter 38. TCP/IP Library Reference</TD
><TD
><TD
WIDTH="10%"
WIDTH="10%"
ALIGN="right"
ALIGN="right"
VALIGN="bottom"
VALIGN="bottom"
><A
><A
HREF="net-common-tcpip-manpages-send.html"
HREF="net-common-tcpip-manpages-send.html"
ACCESSKEY="N"
ACCESSKEY="N"
>Next</A
>Next</A
></TD
></TD
></TR
></TR
></TABLE
></TABLE
><HR
><HR
ALIGN="LEFT"
ALIGN="LEFT"
WIDTH="100%"></DIV
WIDTH="100%"></DIV
><DIV
><DIV
CLASS="SECT1"
CLASS="SECT1"
><H1
><H1
CLASS="SECT1"
CLASS="SECT1"
><A
><A
NAME="NET-COMMON-TCPIP-MANPAGES-SELECT">select</H1
NAME="NET-COMMON-TCPIP-MANPAGES-SELECT">select</H1
><TABLE
><TABLE
BORDER="5"
BORDER="5"
BGCOLOR="#E0E0F0"
BGCOLOR="#E0E0F0"
WIDTH="70%"
WIDTH="70%"
><TR
><TR
><TD
><TD
><PRE
><PRE
CLASS="SCREEN"
CLASS="SCREEN"
>SELECT(2)                     System Calls Manual                    SELECT(2)
>SELECT(2)                     System Calls Manual                    SELECT(2)
 
 
NAME
NAME
     select - synchronous I/O multiplexing
     select - synchronous I/O multiplexing
 
 
SYNOPSIS
SYNOPSIS
     #include &lt;sys/types.h&#62;
     #include &lt;sys/types.h&#62;
     #include &lt;sys/time.h&#62;
     #include &lt;sys/time.h&#62;
     #include &lt;unistd.h&#62;
     #include &lt;unistd.h&#62;
 
 
     int
     int
     select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds,
     select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds,
             struct timeval *timeout);
             struct timeval *timeout);
 
 
     FD_SET(fd, &amp;fdset);
     FD_SET(fd, &amp;fdset);
 
 
     FD_CLR(fd, &amp;fdset);
     FD_CLR(fd, &amp;fdset);
 
 
     FD_ISSET(fd, &amp;fdset);
     FD_ISSET(fd, &amp;fdset);
 
 
     FD_ZERO(&amp;fdset);
     FD_ZERO(&amp;fdset);
 
 
DESCRIPTION
DESCRIPTION
     select() examines the I/O descriptor sets whose addresses are passed in
     select() examines the I/O descriptor sets whose addresses are passed in
     readfds, writefds, and exceptfds to see if some of their descriptors are
     readfds, writefds, and exceptfds to see if some of their descriptors are
     ready for reading, are ready for writing, or have an exceptional condi-
     ready for reading, are ready for writing, or have an exceptional condi-
     tion pending, respectively.  The first nfds descriptors are checked in
     tion pending, respectively.  The first nfds descriptors are checked in
     each set; i.e., the descriptors from 0 through nfds-1 in the descriptor
     each set; i.e., the descriptors from 0 through nfds-1 in the descriptor
     sets are examined.  On return, select() replaces the given descriptor
     sets are examined.  On return, select() replaces the given descriptor
     sets with subsets consisting of those descriptors that are ready for the
     sets with subsets consisting of those descriptors that are ready for the
     requested operation.  select() returns the total number of ready descrip-
     requested operation.  select() returns the total number of ready descrip-
     tors in all the sets.
     tors in all the sets.
 
 
     The descriptor sets are stored as bit fields in arrays of integers.  The
     The descriptor sets are stored as bit fields in arrays of integers.  The
     following macros are provided for manipulating such descriptor sets:
     following macros are provided for manipulating such descriptor sets:
     FD_ZERO(&amp;fdset) initializes a descriptor set fdset to the null set.
     FD_ZERO(&amp;fdset) initializes a descriptor set fdset to the null set.
     FD_SET(fd, &amp;fdset) includes a particular descriptor fd in fdset.
     FD_SET(fd, &amp;fdset) includes a particular descriptor fd in fdset.
     FD_CLR(fd, &amp;fdset) removes fd from fdset.  FD_ISSET(fd, &amp;fdset) is non-
     FD_CLR(fd, &amp;fdset) removes fd from fdset.  FD_ISSET(fd, &amp;fdset) is non-
     zero if fd is a member of fdset, zero otherwise.  The behavior of these
     zero if fd is a member of fdset, zero otherwise.  The behavior of these
     macros is undefined if a descriptor value is less than zero or greater
     macros is undefined if a descriptor value is less than zero or greater
     than or equal to FD_SETSIZE, which is normally at least equal to the max-
     than or equal to FD_SETSIZE, which is normally at least equal to the max-
     imum number of descriptors supported by the system.
     imum number of descriptors supported by the system.
 
 
     If timeout is a non-null pointer, it specifies a maximum interval to wait
     If timeout is a non-null pointer, it specifies a maximum interval to wait
     for the selection to complete.  If timeout is a null pointer, the select
     for the selection to complete.  If timeout is a null pointer, the select
     blocks indefinitely.  To effect a poll, the timeout argument should be
     blocks indefinitely.  To effect a poll, the timeout argument should be
     non-null, pointing to a zero-valued timeval structure.  timeout is not
     non-null, pointing to a zero-valued timeval structure.  timeout is not
     changed by select(), and may be reused on subsequent calls; however, it
     changed by select(), and may be reused on subsequent calls; however, it
     is good style to re-initialize it before each invocation of select().
     is good style to re-initialize it before each invocation of select().
 
 
     Any of readfds, writefds, and exceptfds may be given as null pointers if
     Any of readfds, writefds, and exceptfds may be given as null pointers if
     no descriptors are of interest.
     no descriptors are of interest.
 
 
RETURN VALUES
RETURN VALUES
     select() returns the number of ready descriptors that are contained in
     select() returns the number of ready descriptors that are contained in
     the descriptor sets, or -1 is an error occurred.  If the time limit
     the descriptor sets, or -1 is an error occurred.  If the time limit
     expires, select() returns 0.  If select() returns with an error, includ-
     expires, select() returns 0.  If select() returns with an error, includ-
     ing one due to an interrupted call, the descriptor sets will be unmodi-
     ing one due to an interrupted call, the descriptor sets will be unmodi-
     fied.
     fied.
 
 
ERRORS
ERRORS
     An error return from select() indicates:
     An error return from select() indicates:
 
 
     [EFAULT]           One or more of readfds, writefds, or exceptfds points
     [EFAULT]           One or more of readfds, writefds, or exceptfds points
                        outside the process's allocated address space.
                        outside the process's allocated address space.
 
 
     [EBADF]            One of the descriptor sets specified an invalid
     [EBADF]            One of the descriptor sets specified an invalid
                        descriptor.
                        descriptor.
 
 
     [EINTR]            A signal was delivered before the time limit expired
     [EINTR]            A signal was delivered before the time limit expired
                        and before any of the selected events occurred.
                        and before any of the selected events occurred.
 
 
     [EINVAL]           The specified time limit is invalid.  One of its com-
     [EINVAL]           The specified time limit is invalid.  One of its com-
                        ponents is negative or too large.
                        ponents is negative or too large.
 
 
SEE ALSO
SEE ALSO
     accept(2), connect(2), gettimeofday(2), poll(2), read(2), recv(2),
     accept(2), connect(2), gettimeofday(2), poll(2), read(2), recv(2),
     send(2), write(2), getdtablesize(3)
     send(2), write(2), getdtablesize(3)
 
 
BUGS
BUGS
     Although the provision of getdtablesize(3) was intended to allow user
     Although the provision of getdtablesize(3) was intended to allow user
     programs to be written independent of the kernel limit on the number of
     programs to be written independent of the kernel limit on the number of
     open files, the dimension of a sufficiently large bit field for select
     open files, the dimension of a sufficiently large bit field for select
     remains a problem.  The default bit size of fd_set is based on the symbol
     remains a problem.  The default bit size of fd_set is based on the symbol
     FD_SETSIZE (currently 256), but that is somewhat smaller than the current
     FD_SETSIZE (currently 256), but that is somewhat smaller than the current
     kernel limit to the number of open files.  However, in order to accommo-
     kernel limit to the number of open files.  However, in order to accommo-
     date programs which might potentially use a larger number of open files
     date programs which might potentially use a larger number of open files
     with select, it is possible to increase this size within a program by
     with select, it is possible to increase this size within a program by
     providing a larger definition of FD_SETSIZE before the inclusion of
     providing a larger definition of FD_SETSIZE before the inclusion of
     &lt;sys/types.h&#62;.  The kernel will cope, and the userland libraries provided
     &lt;sys/types.h&#62;.  The kernel will cope, and the userland libraries provided
     with the system are also ready for large numbers of file descriptors.
     with the system are also ready for large numbers of file descriptors.
 
 
     Alternatively, to be really safe, it is possible to allocate fd_set bit-
     Alternatively, to be really safe, it is possible to allocate fd_set bit-
     arrays dynamically.  The idea is to permit a program to work properly
     arrays dynamically.  The idea is to permit a program to work properly
     even if it is execve(2)'d with 4000 file descriptors pre-allocated.  The
     even if it is execve(2)'d with 4000 file descriptors pre-allocated.  The
     following illustrates the technique which is used by userland libraries:
     following illustrates the technique which is used by userland libraries:
 
 
                   fd_set *fdsr;
                   fd_set *fdsr;
                   int max = fd;
                   int max = fd;
 
 
                   fdsr = (fd_set *)calloc(howmany(max+1, NFDBITS),
                   fdsr = (fd_set *)calloc(howmany(max+1, NFDBITS),
                       sizeof(fd_mask));
                       sizeof(fd_mask));
                   if (fdsr == NULL) {
                   if (fdsr == NULL) {
                           ...
                           ...
                           return (-1);
                           return (-1);
                   }
                   }
                   FD_SET(fd, fdsr);
                   FD_SET(fd, fdsr);
                   n = select(max+1, fdsr, NULL, NULL, &amp;tv);
                   n = select(max+1, fdsr, NULL, NULL, &amp;tv);
                   ...
                   ...
                   free(fdsr);
                   free(fdsr);
 
 
     Alternatively, it is possible to use the poll(2) interface.  poll(2) is
     Alternatively, it is possible to use the poll(2) interface.  poll(2) is
     more efficient when the size of select()'s fd_set bit-arrays are very
     more efficient when the size of select()'s fd_set bit-arrays are very
     large, and for fixed numbers of file descriptors one need not size and
     large, and for fixed numbers of file descriptors one need not size and
     dynamically allocate a memory object.
     dynamically allocate a memory object.
 
 
     select() should probably have been designed to return the time remaining
     select() should probably have been designed to return the time remaining
     from the original timeout, if any, by modifying the time value in place.
     from the original timeout, if any, by modifying the time value in place.
     Even though some systems stupidly act in this different way, it is
     Even though some systems stupidly act in this different way, it is
     unlikely this semantic will ever be commonly implemented, as the change
     unlikely this semantic will ever be commonly implemented, as the change
     causes massive source code compatibility problems.  Furthermore, recent
     causes massive source code compatibility problems.  Furthermore, recent
     new standards have dictated the current behaviour.  In general, due to
     new standards have dictated the current behaviour.  In general, due to
     the existence of those brain-damaged non-conforming systems, it is unwise
     the existence of those brain-damaged non-conforming systems, it is unwise
     to assume that the timeout value will be unmodified by the select() call,
     to assume that the timeout value will be unmodified by the select() call,
     and the caller should reinitialize it on each invocation.  Calculating
     and the caller should reinitialize it on each invocation.  Calculating
     the delta is easily done by calling gettimeofday(2) before and after the
     the delta is easily done by calling gettimeofday(2) before and after the
     call to select(), and using timersub() (as described in getitimer(2)).
     call to select(), and using timersub() (as described in getitimer(2)).
 
 
     Internally to the kernel, select() works poorly if multiple processes
     Internally to the kernel, select() works poorly if multiple processes
     wait on the same file descriptor.  Given that, it is rather surprising to
     wait on the same file descriptor.  Given that, it is rather surprising to
     see that many daemons are written that way (i.e., httpd(8)).
     see that many daemons are written that way (i.e., httpd(8)).
 
 
HISTORY
HISTORY
     The select() function call appeared in 4.2BSD.
     The select() function call appeared in 4.2BSD.
 
 
BSD                             March 25, 1994                             BSD
BSD                             March 25, 1994                             BSD
    </PRE
    </PRE
></TD
></TD
></TR
></TR
></TABLE
></TABLE
></DIV
></DIV
><DIV
><DIV
CLASS="NAVFOOTER"
CLASS="NAVFOOTER"
><HR
><HR
ALIGN="LEFT"
ALIGN="LEFT"
WIDTH="100%"><TABLE
WIDTH="100%"><TABLE
SUMMARY="Footer navigation table"
SUMMARY="Footer navigation table"
WIDTH="100%"
WIDTH="100%"
BORDER="0"
BORDER="0"
CELLPADDING="0"
CELLPADDING="0"
CELLSPACING="0"
CELLSPACING="0"
><TR
><TR
><TD
><TD
WIDTH="33%"
WIDTH="33%"
ALIGN="left"
ALIGN="left"
VALIGN="top"
VALIGN="top"
><A
><A
HREF="net-common-tcpip-manpages-poll.html"
HREF="net-common-tcpip-manpages-poll.html"
ACCESSKEY="P"
ACCESSKEY="P"
>Prev</A
>Prev</A
></TD
></TD
><TD
><TD
WIDTH="34%"
WIDTH="34%"
ALIGN="center"
ALIGN="center"
VALIGN="top"
VALIGN="top"
><A
><A
HREF="ecos-ref.html"
HREF="ecos-ref.html"
ACCESSKEY="H"
ACCESSKEY="H"
>Home</A
>Home</A
></TD
></TD
><TD
><TD
WIDTH="33%"
WIDTH="33%"
ALIGN="right"
ALIGN="right"
VALIGN="top"
VALIGN="top"
><A
><A
HREF="net-common-tcpip-manpages-send.html"
HREF="net-common-tcpip-manpages-send.html"
ACCESSKEY="N"
ACCESSKEY="N"
>Next</A
>Next</A
></TD
></TD
></TR
></TR
><TR
><TR
><TD
><TD
WIDTH="33%"
WIDTH="33%"
ALIGN="left"
ALIGN="left"
VALIGN="top"
VALIGN="top"
>poll</TD
>poll</TD
><TD
><TD
WIDTH="34%"
WIDTH="34%"
ALIGN="center"
ALIGN="center"
VALIGN="top"
VALIGN="top"
><A
><A
HREF="tcpip-library-reference.html"
HREF="tcpip-library-reference.html"
ACCESSKEY="U"
ACCESSKEY="U"
>Up</A
>Up</A
></TD
></TD
><TD
><TD
WIDTH="33%"
WIDTH="33%"
ALIGN="right"
ALIGN="right"
VALIGN="top"
VALIGN="top"
>send</TD
>send</TD
></TR
></TR
></TABLE
></TABLE
></DIV
></DIV
></BODY
></BODY
></HTML
></HTML
 
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.