bind(3sock)


bind -- bind a protocol address to a socket

Synopsis

cc [options] file -lsocket -lnsl
#include <sys/types.h>
#include <sys/socket.h>

int bind(int socket, const struct sockaddr *name, size_t namelen);

Description

bind assigns a protocol address to an unnamed socket. When a socket is created with socket, it exists in a name space (address family) but has no assigned address. bind requests that the protocol address pointed to by name be assigned to the socket. namelen specifies the length of the sockaddr structure pointed to by name.

Files

usr/lib/locale/locale/LC_MESSAGES/uxnsl

Return values

If the bind is successful, a 0 value is returned. A return value of -1 indicates an error, which is further specified in the global errno.

Errors

The bind call will fail if:

EBADF
s is not a valid descriptor.

ENOTSOCK
s is a descriptor for a file, not a socket.

EADDRNOTAVAIL
The specified address is not available on the local machine.

EADDRINUSE
The specified address is already in use.

EINVAL
namelen is not the size of a valid address for the specified address family.

EINVAL
The socket is already bound to an address, and the protocol does not support binding to a new address, or the socket has been shut down.

EACCES
The requested address is protected and the current user has inadequate permission to access it.

ENOSR
There were insufficient STREAMS resources for the operation to complete.

EAFNOSUPPORT
The specified address is not a valid address for the address family of the specified socket.

EOPNOTSUPP
The socket type of the specified socket does not support binding to an address.

EISCONN
The socket is already connected.

ENAMETOOLONG
Pathname resolution of a symbolic link produced an intermediate result whose length exceeds PATH_MAX.

ENOBUFS
Insufficient resources were available to complete the call.

The following errors are specific to binding names in the UNIX domain:


ENOTDIR
A component of the path prefix of the pathname in name is not a directory.

ENOENT
A component of the path prefix of the pathname in name does not exist, or the pathname is an empty string.

EACCES
Search permission is denied for a component of the path prefix of the pathname in name, or the requested name requires writing in a directory with a mode that denies write permission.

ELOOP
Too many symbolic links were encountered in translating the pathname in name.

ENAMETOOLONG
A component of the pathname exceeded NAME_MAX characters, or an entire pathname exceeded PATH_MAX characters.

EIO
An I/O error occurred while making the directory entry or allocating the inode.

EROFS
The inode would reside on a read-only file system.

EISDIR
A null pathname was specified.

References

connect(3sock), getsockname(3sock), listen(3sock), socket(3sock), unlink(2)

RFC 2133

Notices

Binding a name in the UNIX domain creates a socket in the file system that must be deleted by the caller when it is no longer needed (see unlink(2)).

The rules used in binding names vary between communication domains.

The type of address structure passed to bind depends on the address family. UNIX domain sockets (address family AF_UNIX) require a struct sockaddr_un as defined in sys/un.h; Internet domain IPv4 sockets (address family AF_INET) require a struct sockaddr_in as defined in netinet/in.h; Internet domain IPv6 sockets (address family AF_INET6) require a struct sockaddr_in6 as defined in netinet/in.h. Other address families may require other structures. Use the structure appropriate to the address family; cast the structure address to a struct sockaddr* in the call to bind and pass the size of the structure in the namelen argument.

In UnixWare 7 the sockaddr structure has been modified to support variable length sockets. The net result of this modification is that the family member has been shortened to 8 bits and a new 8-bit member inserted before it called len. For more information on the new sockaddr structures, see: unix(7sock) and inet(7tcp).


© 2004 The SCO Group, Inc. All rights reserved.
UnixWare 7 Release 7.1.4 - 25 April 2004