Connects two sockets.
Standard C Library (libc.a
#include <sys/socket.h>
int connect ( Socket, Name, NameLength)
int Socket;
const struct sockaddr *Name;
socklen_t NameLength;
The connect subroutine requests a connection between two sockets. The kernel sets up the communication link between the sockets; both sockets must use the same address format and protocol.
If a connect subroutine is issued on an unbound socket or a partially bound socket (a socket that is assigned a port number but no IP address), the system automatically binds the socket. The connect subroutine can be used to connect a socket to itself. This can be done, for example, by binding a socket to a local port (using bind) and then connecting it to the same port with a local IP address (using connect).
The connect subroutine performs a different action for each of the following two types of initiating sockets:
Implementation Specifics
Item | Description |
---|---|
Socket | Specifies the unique name of the socket. |
Name | Specifies the address of target socket that will form the other end of the communication line |
NameLength | Specifies the length of the address structure. |
Upon successful completion, the connect subroutine returns a value of 0.
If the connect subroutine is unsuccessful, the system handler performs the following functions:
The connect subroutine is unsuccessful if any of the following errors occurs:
Value | Description |
---|---|
EADDRINUSE | The specified address is already in use. This error will also occur if the SO_REUSEADDR socket option was set and the local address (whether specified or selected by the system) is already in use. |
EADDRNOTAVAIL | The specified address is not available from the local machine. |
EAFNOSUPPORT | The addresses in the specified address family cannot be used with this socket. |
EALREADY | The socket is specified with O_NONBLOCK or O_NDLAY, and a previous connecttion attempt has not yet completed. |
EINTR | The attempt to establish a connection was interrupted by delivery of a signal that was caught; the connection will be established asynchronously. |
EACCES | Search permission is denied on a component of the path prefix or write access to the named socket is denied. |
ENOBUFS | The system ran out of memory for an internal data structure. |
EOPNOTSUPP | The socket referenced by Socket parameter does not support connect. |
EWOULDBLOCK | The range allocated for TCP/UDP ephemeral ports has been exhausted. |
EBADF | The Socket parameter is not valid. |
ECONNREFUSED | The attempt to connect was rejected. |
EFAULT | The Address parameter is not in a writable part of the user address space. |
EINPROGRESS | The socket is marked as nonblocking. The connection cannot be immediately completed. The application program can select the socket for writing during the connection process. |
EINVAL | The specified path name contains a character with the high-order bit set. |
EISCONN | The socket is already connected. |
ENETDOWN | The specified physical network is down. |
ENETUNREACH | No route to the network or host is present. |
ENOSPC | There is no space left on a device or system table. |
ENOTCONN | The socket could not be connected. |
ENOTSOCK | The Socket parameter refers to a file, not a socket. |
ETIMEDOUT | The establishment of a connection timed out before a connection was made. |
EPROTOTYPE | The specified address has a different type from the socket that is bound to the specified peer address. |
ELOOP | Too many symbolic links were encountered in translating the path name in address. |
ENOENT | A component of the path name does not name an existing file or the path name is an empty string. |
ENOTDIR | A component of the path prefix of the path name in address is not a directory. |
The following program fragment illustrates the use of the connect subroutine by a client to initiate a connection to a server's socket.
struct sockaddr_un server;
.
.
.
connect(s,(struct sockaddr*)&server, sun_len(&server));