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

# connect(+Stream, +Address)

Connects a socket with the given address.

Stream
  Stream handle or alias (atom)
Address
  Atom, integer or structure.

## Description

connect/2 is a direct link to the connect(2) socket system call. Stream must be a socket stream created with socket/3. If the socket was created in the unix domain, Address must be an atom which identifies the file associated with the socket. If Address is 0 and socket type is datagram, the socket is disconnected.

If the socket is in the internet domain, the address is in the form HostName/Port, where the atom HostName denotes the host to be connected on the given integer port Port. If Address is 0/0 and socket type is datagram, the socket is disconnected.

Every socket communication in ECLiPSe requires at least one of every two communicating processes to call connect/2, because system calls to perform direct datagram addressing are not available. The socket connection can be queried with get_stream_info(s, connection, C).

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.

Datagram sockets require a connect/2 call from the process that wants to write on the socket and bind/2 from the one that reads from it.

If a system interface error (170) is raised while calling connect/2, the socket will be automatically closed. This is to get around a problem where the connect(2) system call can leave the socket in an incorrect state on some operating systems.

### Modes and Determinism

- connect(+, +) is det

### Exceptions

(4) instantiation fault
  Stream or Address is not instantiated.
(5) type error
  Stream is instantiated, but not to an atom or a stream handle.
(5) type error
  Address is instantiated but not to the form accepted by the socket domain.
(6) out of range
  Address is a nonzero integer.
(170) system interface error
  It was not possible to connect the socket.

## See Also

socket / 3, listen / 2, accept / 3, connect / 2, current_stream / 1, get_stream_info / 3