Museum

Home

Lab Overview

Retrotechnology Articles

⇒ Online Manual

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

bind(2)

connect(2)

listen(2)

select(2)

socket(2)

ACCEPT(2)

NAME

accept − accept a connection on a socket

USAGE

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

ns = accept(s, addr, addrlen)
int ns, s;
struct sockaddr *addr;
int *addrlen;

DESCRIPTION

Accept takes the first connection from the queue of connections waiting at a socket s, creates a new socket with the properties of the original one, and allocates a file descriptor, ns, for the new socket.  The original socket s was created with socket (2) and was bound to an address with bind(2).  S is now listening for connections after a listen(2). 

If there are no connections waiting, 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 connections are waiting, accept returns an error (see below).  The new accepted socket, ns, may not accept more connections.  The original socket s, however, remains open. 

The argument addr is a result parameter, which is filled in with the address of the connecting entity.  The environment in which communications take place determines the exact format of the addr parameter.  Addrlen is a value-result parameter; it should initially contain the amount of space that addr points to; upon return, it contains the actual length (in bytes) of the address returned.  You can use this call with connection-based socket types, currently with SOCK_STREAM. 

You may select(2) a socket for the purposes of doing an accept by selecting it for read. 

RETURN VALUE

The call returns −1 on error.  If it succeeds, it returns a non-negative integer, which is the descriptor for the accepted socket. 

ERRORS

The accept will fail if:

[EBADF] The descriptor is invalid. 

[ENOTSOCK] The descriptor refers to a file, not a socket. 

[EOPNOTSUPP] The socket is not of the type SOCK_STREAM. 

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

[EWOULDBLOCK] The socket is marked as non-blocking and no connections are waiting. 

RELATED INFORMATION

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

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026