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

FreeBSD Manual Pages

  
 
  

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

NAME
       accept -- accept	a connection on	a socket

LIBRARY
       Standard	C Library (libc, -lc)

SYNOPSIS
       #include	<sys/types.h>
       #include	<sys/socket.h>

       int
       accept(int      s,     struct	 sockaddr     *	    restrict	 addr,
	   socklen_t * restrict	addrlen);

DESCRIPTION
       The argument s is a socket that has been	created	with socket(2),	 bound
       to  an  address	with bind(2), and is listening for connections after a
       listen(2).  The accept()	system call extracts the first connection  re-
       quest  on  the  queue of	pending	connections, creates a new socket, and
       allocates a new file descriptor for the socket which inherits the state
       of the O_NONBLOCK property from the original socket s.

       If no pending connections are present on	the queue,  and	 the  original
       socket  is not marked as	non-blocking, accept() blocks the caller until
       a connection is present.	 If the	original socket	is marked non-blocking
       and no pending connections are present on the queue,  accept()  returns
       an  error  as  described	below.	The accepted socket may	not be used to
       accept more connections.	 The original socket s remains open.

       The argument addr is a result argument that is filled-in	with  the  ad-
       dress  of  the connecting entity, as known to the communications	layer.
       The exact format	of the addr argument is	determined by  the  domain  in
       which  the communication	is occurring.  A null pointer may be specified
       for addr	if the address information  is	not  desired;  in  this	 case,
       addrlen	is  not	 used and should also be null.	Otherwise, the addrlen
       argument	is a value-result argument; it should  initially  contain  the
       amount  of  space pointed to by addr; on	return it will contain the ac-
       tual length (in bytes) of the address returned.	This call is used with
       connection-based	socket types, currently	with SOCK_STREAM.

       It is possible to select(2) a socket  for  the  purposes	 of  doing  an
       accept()	by selecting it	for read.

       For  certain  protocols which require an	explicit confirmation, such as
       ISO or DATAKIT, accept()	can be thought of  as  merely  dequeueing  the
       next  connection	 request  and not implying confirmation.  Confirmation
       can be implied by a normal read or write	on the	new  file  descriptor,
       and rejection can be implied by closing the new socket.

       For  some  applications,	 performance  may  be  enhanced	 by  using  an
       accept_filter(9)	to pre-process incoming	connections.

RETURN VALUES
       The call	returns	-1 on error.  If it succeeds, it returns  a  non-nega-
       tive integer that is a descriptor for the accepted socket.

ERRORS
       The accept() system call	will fail if:

       [EBADF]		  The descriptor is invalid.

       [EINTR]		  The accept() operation was interrupted.

       [EMFILE]		  The per-process descriptor table is full.

       [ENFILE]		  The system file table	is full.

       [ENOTSOCK]	  The descriptor references a file, not	a socket.

       [EINVAL]		  listen(2) has	not been called	on the socket descrip-
			  tor.

       [EINVAL]		  The addrlen argument is negative.

       [EFAULT]		  The  addr  argument is not in	a writable part	of the
			  user address space.

       [EWOULDBLOCK]	  The socket is	marked non-blocking and	no connections
			  are present to be accepted.

       [ECONNABORTED]	  A connection arrived,	but it was closed while	 wait-
			  ing on the listen queue.

SEE ALSO
       bind(2),	 connect(2),  getpeername(2), listen(2), select(2), socket(2),
       accept_filter(9)

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

FreeBSD	7.0		       December	11, 1993		     ACCEPT(2)

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

home | help