connect Subroutine

Purpose

Connects two sockets.

Library

Standard C Library (libc.a

Syntax

#include <sys/socket.h> 

int connect ( Socket, Name,  NameLength)  
int Socket;
const struct sockaddr *Name;
socklen_t NameLength;

Description

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

Parameters

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.

Return Values

Upon successful completion, the connect subroutine returns a value of 0.

If the connect subroutine is unsuccessful, the system handler performs the following functions:

Error Codes

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.

Examples

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));