bind#
Synopsis#
#include <sys/socket.h>
int bind(int socket, const struct sockaddr *address, socklen_t address_len);
Status#
Partially implemented.
Conformance#
IEEE Std 1003.1-2017
Description#
The bind()
function binds a name to socket socket
.
Arguments#
socket
- the file descriptor of the socket.
address
- the pointer to a sockaddr structure containing the address to be bound to the socket. The length and format
of the address depend on the address family of the socket.
address_len
- the length of the sockaddr
structure pointed to by the address
argument.
The bind()
function assigns a local socket address address
to a socket identified by descriptor socket
that has no
local socket address assigned. Sockets created with the socket()
function are initially unnamed; they are identified
only by their address family.
Return value#
0
on successful completion,
-1
otherwise (errno
is set then adequately)
Errors#
[EADDRINUSE
] - the specified address is already in use.
[EADDRNOTAVAIL
] - the specified address is not available from the local machine.
[EAFNOSUPPORT
] - the specified address is not a valid address for the address family of the specified socket.
[EALREADY
] - an assignment request is already in progress for the specified socket.
[EBADF
] - the socket argument is not a valid file descriptor.
[EINPROGRESS
] - O_NONBLOCK
is set for the file descriptor for the socket and the assignment cannot be immediately
performed; the assignment is performed asynchronously.
[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.
[ENOBUFS
] - insufficient resources were available to complete the call.
[ENOTSOCK
] - the socket argument does not refer to a socket.
[EOPNOTSUPP
] - the socket type of the specified socket does not support binding to an address.
[EACCES
] - the specified address is protected, and the current user does not have permission to bind to it.
[EINVAL
] - the address_len
argument is not a valid length for the address family.
[EISCONN
] - the socket is already connected.
[ELOOP
] - more than {SYMLOOP_MAX
} symbolic links were encountered during resolution of the path name in address<
.
[ENAMETOOLONG
] - the length of a path name exceeds {PATH_MAX
}, or path name resolution of a symbolic link produced
an intermediate result with a length that exceeds {PATH_MAX
}.
If the address family of the socket is AF_UNIX
, then bind()
fails if:
[EACCES
] - a component of the path prefix denies search permission, or the requested name requires writing in a
directory with a mode that denies write permission.
[EDESTADDRREQ
] or [EISDIR
] - the address
argument is a null pointer.
[EIO
] - an I/O error occurred.
[ELOOP
] - a loop exists in symbolic links encountered during resolution of the path name in address
.
[ENAMETOOLONG
] - the length of a component of a path name is longer than {NAME_MAX
}.
[ENOENT
] - a component of the path prefix of the path name in address
does not name an existing file or the path
name is an empty string.
[ENOENT
] or [ENOTDIR
] - the path name in address
contains at least one non- / character and ends with one or more
trailing / characters. If the path name without the trailing / characters would name an existing file,
a [ENOENT
] error shall not occur.
[ENOTDIR
] - a component of the path prefix of the path name in address
names an existing file that is neither a
directory nor a symbolic link to a directory, or the path name in address
contains at least one non- / character and
ends with one or more trailing / characters and the last path name component names an existing file that is neither a
directory nor a symbolic link to a directory.
[EROFS
] - the name would reside on a read-only file system.
Tests#
Untested