bind
The Windows
Sockets bind function associates a local address with a socket.
int bind (
SOCKET s, |
|
const
struct sockaddr FAR* name, |
|
int namelen |
|
); |
|
Parameters
s
[in] A
descriptor identifying an unbound socket.
name
[in] The
address to assign to the socket. The sockaddr structure is defined as follows:
struct sockaddr {
u_short
sa_family;
char
sa_data[14];
};
Except for
the sa_family field, sockaddr contents are expressed in network byte order.
namelen
[in] The
length of the name.
Remarks
This routine
is used on an unconnected connectionless or connection-oriented socket, before
subsequent connects or listens. When a socket is created with socket,
it exists in a name space (address family), but it has no name assigned. bind
establishes the local association of the socket by assigning a local name to an
unnamed socket.
As an
example, in the Internet address family, a name consists of three parts: the
address family, a host address, and a port number which identifies the
application. In Windows Sockets 2, the name parameter is not strictly
interpreted as a pointer to a "sockaddr" structure. It is cast this
way for Windows Sockets compatibility. Service Providers are free to regard it
as a pointer to a block of memory of size namelen. The first two bytes
in this block (corresponding to "sa_family" in the
"sockaddr" declaration) must contain the address family that was
used to create the socket. Otherwise, an error WSAEFAULT will occur.
If an
application does not care what local address is assigned to it, it can specify
the manifest constant value ADDR_ANY for the sa_data field of the name
parameter. This allows the underlying service provider to use any appropriate
network address, potentially simplifying application programming in the
presence of multihomed hosts (that is, hosts that have more than one network
interface and address). For TCP/IP, if the port is specified as zero, the
service provider will assign a unique port to the application with a value
between 1024 and 5000. The application can use getsockname after bind
to learn the address and the port that has been assigned to it, but note that
if the Internet address is equal to INADDR_ANY, getsockname will not
necessarily be able to supply the address until the socket is connected, since
several addresses can be valid if the host is multihomed.
Return Values
If no error
occurs, bind returns zero. Otherwise, it returns SOCKET_ERROR, and a
specific error code can be retrieved by calling WSAGetLastError.
Error Codes
WSANOTINITIALISED |
A
successful WSAStartup must occur before using this function. |
WSAENETDOWN |
The network
subsystem has failed. |
WSAEADDRINUSE
|
The
specified address is already in use. (See the SO_REUSEADDR socket option
under setsockopt.) |
WSAEFAULT |
The name
or the namelen argument is not a valid part of the user address space,
the namelen argument is too small, the name argument contains
incorrect address format for the associated address family, or the first two
bytes of the memory block specified by name does not match the address
family associated with the socket descriptor s. |
WSAEINPROGRESS |
A blocking
Windows Sockets 1.1 call is in progress, or the service provider is still
processing a callback function. |
WSAEINVAL |
The socket
is already bound to an address. |
WSAENOBUFS |
Not enough
buffers available, too many connections. |
WSAENOTSOCK |
The
descriptor is not a socket. |
See Also