connect()

Updated: April 19, 2023

Initiate a connection on a socket

Synopsis:

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

int connect( int s,
             const struct sockaddr * name,
             socklen_t namelen );

Arguments:

s
The descriptor of the socket on which to initiate the connection.
name
The name of the socket to connect to for a SOCK_STREAM connection.
namelen
The length of the name, in bytes.

Library:

libsocket

Use the -l socket option to qcc to link against this library.

Description:

The connect() function establishes the connection according to the socket type specified by s:

SOCK_DGRAM
Specifies the peer that the socket is to be associated with. This address is the one that datagrams are to be sent to, and the only one that datagrams are to be received from.
SOCK_STREAM
This call attempts to make a connection to another socket. The other socket is specified by name, which is an address in the communications space of that socket. Each communications space interprets name in its own way.

Stream sockets may successfully connect only once, whereas datagram sockets may use connect() multiple times to change their association. Datagram sockets may dissolve the association by connecting to an invalid address, such as a null address.

Returns:

0
Success.
-1
An error occurred (errno is set).

Errors:

EADDRINUSE
The address is already in use.
EADDRNOTAVAIL
The specified address isn't available on this machine.
EAFNOSUPPORT
Addresses in the specified address family can't be used with this socket.
EALREADY
The socket is nonblocking; a previous connection attempt hasn't yet been completed.
EBADF
Invalid descriptor s.
ECONNABORTED
The connect() was terminated under software control.
ECONNREFUSED
The attempt to connect was forcefully rejected.
EFAULT
The name parameter specifies an area outside the process address space.
EHOSTUNREACH
No route to host; the host system can't be reached.
EINPROGRESS
The socket is nonblocking; the connection can't be completed immediately. It's possible to do a poll() for completion by selecting the socket for writing.
EISCONN
The socket is already connected.
ENETUNREACH
The network isn't reachable from this host.
ETIMEDOUT
The attempt to establish a connection timed out; no connection was made.
Note: Protocols such as TCP do not allow further connection requests on a socket after an ECONNREFUSED error. In such a situation, the socket must be closed and a new one created before a subsequent attempt for connection is made.

Classification:

POSIX 1003.1

Safety:  
Cancellation point Yes
Interrupt handler No
Signal handler No
Thread Yes