[ Stream I/O | Reference Manual | Alphabetic Index ]

# accept(+Stream, -From, ?NewStream)

Accepts a connection for a stream socket and creates a new socket which can be used for I/O.

Stream
  Stream handle or alias (atom)
From
  A term unifiable with a structure atom/integer.
NewStream
  Atom, structure or variable.

## Description

accept/3 is a direct link to the accept(2) socket system call. Stream must be a socket stream created with socket/3 or new_socket_server/3 of the type stream, listening for connections. accept/3 blocks until there is a connection request from another process, and then it creates a new socket stream NewStream with the same properties as Stream, which can be then used for communication with the connecting process. The Stream socket remains open and listening for further connections.

In the internet domain, From is unified with the address of the connecting process in the form HostName/Port. In the unix domain, From is unified with an empty atom ''.

When instantiated, NewStream must be a symbolic stream name, i.e. an atom. The stream can also be specified as sigio(NewStream). In this case the socket is created and in addition it is instructed to send the signal io each time new data appears in it.

Stream sockets are connected using the standard sequence, i.e. socket/3, bind/2, listen/2 and accept/3 on the server and socket/3 and connect/2 on the client. After the sockets are connected, both processes can use them for reading and writing.

### Modes and Determinism

- accept(+, -, -) is det
- accept(+, -, +) is det

### Exceptions

(4) instantiation fault
  Stream is not instantiated.
(5) type error
  Stream is instantiated, but not to an atom or a sigio/1 structure.
(5) type error
  From is instantiated but not to an atom or a structure.
(170) system interface error
  It was not possible to execute the system call.

## Examples

    Success:
          socket(internet, stream, s), bind(s, Addr), listen(s, 1),
          accept(s, From, news).

    Error:
          accept(s, From, 6)            (Error 5).
          socket(internet, datagram, s), bind(s, Addr), listen(s, 2),
          accept(s, From, news)         (Error 170).

## See Also

socket / 3, bind / 2, listen / 2, connect / 2