BIND(2) | System Calls Manual | BIND(2) |
bind
—
#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.
The rules used in name binding vary between communication domains. Consult the manual entries in section 4 for detailed information.
bind
() call will fail if:
EACCES
]EADDRINUSE
]EADDRNOTAVAIL
]EAFNOSUPPORT
]EBADF
]EFAULT
]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
]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.
April 5, 2015 | NetBSD 9.2 |