Next: Listening, Up: Connections
In making a connection, the client makes a connection while the server
waits for and accepts the connection. Here we discuss what the client
program must do with the connect
function, which is declared in
sys/socket.h.
The
connect
function initiates a connection from the socket with file descriptor socket to the socket whose address is specified by the addr and length arguments. (This socket is typically on another machine, and it must be already set up as a server.) See Socket Addresses, for information about how these arguments are interpreted.Normally,
connect
waits until the server responds to the request before it returns. You can set nonblocking mode on the socket socket to makeconnect
return immediately without waiting for the response. See File Status Flags, for information about nonblocking mode.The normal return value from
connect
is0
. If an error occurs,connect
returns-1
. The followingerrno
error conditions are defined for this function:
EBADF
- The socket socket is not a valid file descriptor.
ENOTSOCK
- File descriptor socket is not a socket.
EADDRNOTAVAIL
- The specified address is not available on the remote machine.
EAFNOSUPPORT
- The namespace of the addr is not supported by this socket.
EISCONN
- The socket socket is already connected.
ETIMEDOUT
- The attempt to establish the connection timed out.
ECONNREFUSED
- The server has actively refused to establish the connection.
ENETUNREACH
- The network of the given addr isn't reachable from this host.
EADDRINUSE
- The socket address of the given addr is already in use.
EINPROGRESS
- The socket socket is non-blocking and the connection could not be established immediately. You can determine when the connection is completely established with
select
; see Waiting for I/O. Anotherconnect
call on the same socket, before the connection is completely established, will fail withEALREADY
.EALREADY
- The socket socket is non-blocking and already has a pending connection in progress (see
EINPROGRESS
above).This function is defined as a cancellation point in multi-threaded programs, so one has to be prepared for this and make sure that allocated resources (like memory, files descriptors, semaphores or whatever) are freed even if the thread is canceled.