If it is of type SOCK_DGRAM, this call specifies the peer with
which the socket is to be associated; this address is that to which
datagrams are to be sent, and the only address from which datagrams
are to be received.
If the socket is of type SOCK_STREAM, this call attempts to
make a connection to another socket.
The other socket is specified by addr, which is an
address in the communications space of the socket. Each
communications space interprets the addr parameter in its
own way. Generally, stream sockets may successfully connect(2) only
once; datagram sockets may use connect(2) multiple times to
change their association. Datagram sockets may dissolve the
association by connecting to an invalid address, such as a null
address.
The specified address is not available on this machine.
[EAFNOSUPPORT]
Addresses in the specified address family cannot be used with
this socket.
[EALREADY]
The socket is non-blocking and a previous connection attempt
has not yet been completed.
[EBADF]
S is not a valid descriptor.
[ECONNREFUSED]
The attempt to connect was forcefully rejected.
[EFAULT]
The addr parameter specifies an area outside the process
address space.
[EINPROGRESS]
The socket is non-blocking and the connection cannot be
completed immediately. It is possible to select(2) for completion by
selecting the socket for writing.
[EISCONN]
The socket is already connected.
[ENETUNREACH]
The network isn't reachable from this host.
[ENOTSOCK]
S is a descriptor for a file, not a socket.
[ETIMEDOUT]
Connection establishment timed out without establishing a
connection.
The following errors are specific to sockets using the AF_LOCAL
protocol family (previously known as AF_UNIX).
[EACCES]
Search permission is denied for a component of the path
prefix.
[EACCES]
Write access to the named socket is denied.
[EINVAL]
The pathname contains a character with the high-order bit set,
or the call was applied against a device that doesn't support
sockets.
[ELOOP]
Too many symbolic links were encountered in translating the
pathname.
[ENAMETOOLONG]
A component of a pathname exceeded {NAME_MAX} characters, or an
entire path name exceeded {PATH_MAX} characters.
[ENOENT]
The named socket does not exist.
[ENOTDIR]
A component of the path prefix is not a directory.