| BIND(2) | System Calls Manual | BIND(2) |
bind — bind a name
to a socket
Standard C Library (libc, -lc)
#include
<sys/socket.h>
int
bind(int
s, const struct sockaddr
*name, socklen_t
namelen);
bind()
assigns a name to an unnamed socket. When a socket is created with
socket(2) it exists in a name
space (address family) but has no name assigned.
bind() requests that name be
assigned to the socket. namelen indicates the amount
of space pointed to by name, in bytes.
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 (using unlink(2)).
The rules used in name binding vary between communication domains. Consult the manual entries in section 4 for detailed information.
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.
The bind() call will fail if:
EACCES]EADDRINUSE]EADDRNOTAVAIL]EAFNOSUPPORT]EBADF]EFAULT]EINVAL]EINVAL]ENOTSOCK]The following errors are specific to binding names in the UNIX domain.
EIO]EISDIR]ELOOP]ENAMETOOLONG]NAME_MAX}
characters, or an entire path name exceeded
{PATH_MAX} characters.ENOENT]ENOTDIR]EROFS]connect(2), getsockname(2), listen(2), socket(2), inet(4), inet6(4)
The bind() function call appeared in
4.2BSD.
bind() was changed in
NetBSD 1.4 to prevent the binding of a socket to the
same port as an existing socket when all of the following is true:
INADDR_ANY,INADDR_ANY with
SO_REUSEPORT set.This prevents an attack where a user could bind to a port with the
host's IP address (after setting SO_REUSEADDR) and
‘steal’ packets destined for a server that bound to the same
port with INADDR_ANY.
bind() was changed in
NetBSD 4.0 to honor the user's umask when binding
sockets in the local domain. This was done to match the behavior of other
operating systems, including FreeBSD,
OpenBSD, and Linux, and to improve compatibility
with some third-party software. Please note that this behavior
is not portable. If
you must bind a local socket in a portable and secure way, you need to make
a directory with tight permissions and then create the socket inside it.
| June 28, 2022 | NetBSD 11.0 |