ACCEPT(2)                        System Calls                        ACCEPT(2)




NAME

       accept - accept a connection on a socket


SYNOPSIS

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

       int accept (int s, struct sockaddr *addr, int *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 argument extracts the first connection request
       on the queue of pending connections, creates a new socket with the same
       properties of s and allocates a new file descriptor for the socket.  If
       no pending connections are present on the queue, and the socket is  not
       marked  as non-blocking, accept blocks the caller until a connection is
       present.  If the socket is marked non-blocking and no  pending  connec‐
       tions  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 parameter that is filled in with the ad‐
       dress of the connecting entity, as known to the  communications  layer.
       The  exact  format of the addr parameter is determined by the domain in
       which the communication is occurring.  The addrlen  is  a  value-result
       parameter;  it  should initially contain the amount of space pointed to
       by addr, on return it will contain the actual 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  ac
       cept 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  re‐
       jection can be implied by closing the new socket.

       One can obtain user connection request data without confirming the con‐
       nection by issuing a recvmsg(2) call with an msg_iovlen of 0 and a non-
       zero msg_controllen, or by issuing a getsockopt(2) request.  Similarly,
       one can provide user connection  rejection  information  by  issuing  a
       sendmsg(2)  call  with  providing  only  the control information, or by
       calling setsockopt(2).


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 will fail if:

              EBADF  The descriptor is invalid.

              ENOTSOCK
                     The descriptor references a file, not a socket.

              EOPNOTSUPP
                     The referenced socket is not of type SOCK_STREAM.

              EFAULT The  addr parameter 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.


SEE ALSO

       bind(2), connect(2), listen(2), select(2), socket(2)


HISTORY

       The  accept  function  appeared in 4.2BSD.  The first appearance in GNO
       was in v2.0.5.



GNO                             16 January 1997                      ACCEPT(2)

Man(1) output converted with man2html