# accept

## PROLOG



           This manual page is part of the POSIX Programmer's Manual.  The
           Linux implementation of this interface may differ (consult the
           corresponding Linux manual page for details of Linux behavior), or
           the interface may not be implemented on Linux.
    


## NAME



           accept — accept a new connection on a socket
    


## SYNOPSIS



           #include <sys/socket.h>
    
           int accept(int _socket_ , struct sockaddr *restrict _address_ ,
               socklen_t *restrict _address_len_);
    


## DESCRIPTION



           The _accept_() function shall extract the first connection on the
           queue of pending connections, create a new socket with the same
           socket type protocol and address family as the specified socket,
           and allocate a new file descriptor for that socket. The file
           descriptor shall be allocated as described in _Section 2.14_ , _File_
           _Descriptor Allocation_.
    
           The _accept_() function takes the following arguments:
    
           _socket_      Specifies a socket that was created with _socket_(), has
                       been bound to an address with _bind_(), and has issued a
                       successful call to _listen_().
    
           _address_     Either a null pointer, or a pointer to a **sockaddr**
                       structure where the address of the connecting socket
                       shall be returned.
    
           _address_len_ Either a null pointer, if _address_ is a null pointer,
                       or a pointer to a **socklen_t** object which on input
                       specifies the length of the supplied **sockaddr**
                       structure, and on output specifies the length of the
                       stored address.
    
           If _address_ is not a null pointer, the address of the peer for the
           accepted connection shall be stored in the **sockaddr** structure
           pointed to by _address_ , and the length of this address shall be
           stored in the object pointed to by _address_len_.
    
           If the actual length of the address is greater than the length of
           the supplied **sockaddr** structure, the stored address shall be
           truncated.
    
           If the protocol permits connections by unbound clients, and the
           peer is not bound, then the value stored in the object pointed to
           by _address_ is unspecified.
    
           If the listen queue is empty of connection requests and O_NONBLOCK
           is not set on the file descriptor for the socket, _accept_() shall
           block until a connection is present. If the _listen_() queue is
           empty of connection requests and O_NONBLOCK is set on the file
           descriptor for the socket, _accept_() shall fail and set _errno_ to
           **[EAGAIN]** or **[EWOULDBLOCK]**.
    
           The accepted socket cannot itself accept more connections. The
           original socket remains open and can accept more connections.
    


## RETURN VALUE



           Upon successful completion, _accept_() shall return the non-negative
           file descriptor of the accepted socket.  Otherwise, -1 shall be
           returned, _errno_ shall be set to indicate the error, and any object
           pointed to by _address_len_ shall remain unchanged.
    


## ERRORS



           The _accept_() function shall fail if:
    
           **EAGAIN** or **EWOULDBLOCK**
                  O_NONBLOCK is set for the socket file descriptor and no
                  connections are present to be accepted.
    
           **EBADF** The _socket_ argument is not a valid file descriptor.
    
           **ECONNABORTED**
                  A connection has been aborted.
    
           **EINTR** The _accept_() function was interrupted by a signal that was
                  caught before a valid connection arrived.
    
           **EINVAL** The _socket_ is not accepting connections.
    
           **EMFILE** All file descriptors available to the process are currently
                  open.
    
           **ENFILE** The maximum number of file descriptors in the system are
                  already open.
    
           **ENOBUFS**
                  No buffer space is available.
    
           **ENOMEM** There was insufficient memory available to complete the
                  operation.
    
           **ENOTSOCK**
                  The _socket_ argument does not refer to a socket.
    
           **EOPNOTSUPP**
                  The socket type of the specified socket does not support
                  accepting connections.
    
           The _accept_() function may fail if:
    
           **EPROTO** A protocol error has occurred; for example, the STREAMS
                  protocol stack has not been initialized.
    
           _The following sections are informative._
    


## EXAMPLES



           None.
    


## APPLICATION USAGE



           When a connection is available, _select_() indicates that the file
           descriptor for the socket is ready for reading.
    


## RATIONALE



           None.
    


## FUTURE DIRECTIONS



           None.
    


* * *