Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
SELECT(2)		      System Calls Manual		     SELECT(2)

NAME
       select -- synchronous I/O multiplexing

LIBRARY
       Standard	C Library (libc, -lc)

SYNOPSIS
       #include	<sys/select.h>

       int
       select(int  nfds, fd_set	*readfds, fd_set *writefds, fd_set *exceptfds,
	   struct timeval *timeout);

       FD_SET(fd, _fdset);

       FD_CLR(fd, _fdset);

       FD_ISSET(fd, _fdset);

       FD_ZERO(_fdset);

DESCRIPTION
       The select() system call	examines the I/O  descriptor  sets  whose  ad-
       dresses	are  passed in readfds,	writefds, and exceptfds	to see if some
       of their	descriptors are	ready for reading, are ready for  writing,  or
       have  an	 exceptional condition pending,	respectively.  The only	excep-
       tional condition	detectable is out-of-band data received	on  a  socket.
       The  first nfds descriptors are checked in each set; i.e., the descrip-
       tors from 0 through nfds-1 in the descriptor sets are examined.	On re-
       turn, select() replaces the given descriptor sets with subsets consist-
       ing of those descriptors	that are ready for  the	 requested  operation.
       The  select() system call returns the total number of ready descriptors
       in all the sets.

       The descriptor sets are stored as bit fields  in	 arrays	 of  integers.
       The  following  macros  are  provided  for manipulating such descriptor
       sets: FD_ZERO(_fdset) initializes a descriptor set fdset	 to  the  null
       set.   FD_SET(fd, _fdset) includes a particular descriptor fd in	fdset.
       FD_CLR(fd, _fdset) removes fd from fdset.  FD_ISSET(fd, _fdset) is non-
       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
       than  or	 equal	to FD_SETSIZE, which is	normally at least equal	to the
       maximum number of descriptors supported by the system.

       If timeout is not a null	pointer, it specifies the maximum interval  to
       wait  for  the selection	to complete.  System activity can lengthen the
       interval	by an indeterminate amount.

       If timeout is a null pointer, the select	blocks indefinitely.

       To effect a poll, the timeout argument should not be  a	null  pointer,
       but it should point to a	zero-valued timeval structure.

       Any  of	readfds, writefds, and exceptfds may be	given as null pointers
       if no descriptors are of	interest.

RETURN VALUES
       The select() system call	returns	the number of ready  descriptors  that
       are  contained  in the descriptor sets, or -1 if	an error occurred.  If
       the time	limit expires, select()	returns	0.  If select()	 returns  with
       an error, including one due to an interrupted system call, the descrip-
       tor sets	will be	unmodified.

ERRORS
       An error	return from select() indicates:

       [EBADF]		  One  of the descriptor sets specified	an invalid de-
			  scriptor.

       [EFAULT]		  One of the arguments readfds,	 writefds,  exceptfds,
			  or timeout points to an invalid address.

       [EINTR]		  A signal was delivered before	the time limit expired
			  and before any of the	selected events	occurred.

       [EINVAL]		  The  specified  time	limit  is invalid.  One	of its
			  components is	negative or too	large.

       [EINVAL]		  The nfds argument was	invalid.

SEE ALSO
       accept(2), connect(2),  getdtablesize(2),  gettimeofday(2),  kqueue(2),
       poll(2),	pselect(2), read(2), recv(2), send(2), write(2), clocks(7)

NOTES
       The default size	of FD_SETSIZE is currently 1024.  In order to accommo-
       date programs which might potentially use a larger number of open files
       with  select(), it is possible to increase this size by having the pro-
       gram define FD_SETSIZE before the inclusion of  any  header  which  in-
       cludes <sys/types.h>.

       If nfds is greater than the number of open files, select() is not guar-
       anteed to examine the unused file descriptors.  For historical reasons,
       select()	will always examine the	first 256 descriptors.

STANDARDS
       The  select()  system  call  and	 FD_CLR(),  FD_ISSET(),	 FD_SET(), and
       FD_ZERO() macros	conform	with IEEE Std 1003.1-2001 ("POSIX.1").

HISTORY
       The select() system call	appeared in 4.2BSD.

BUGS
       Version 2 of the	Single UNIX Specification ("SUSv2") allows systems  to
       modify  the  original  timeout  in place.  Thus,	it is unwise to	assume
       that the	timeout	value will be unmodified by the	select() system	 call.
       FreeBSD	does not modify	the return value, which	can cause problems for
       applications ported from	other systems.

FreeBSD	13.2			 June 25, 2020			     SELECT(2)

NAME | LIBRARY | SYNOPSIS | DESCRIPTION | RETURN VALUES | ERRORS | SEE ALSO | NOTES | STANDARDS | HISTORY | BUGS

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=select&sektion=2&manpath=FreeBSD+14.0-RELEASE+and+Ports>

home | help