| 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.3 |