bind a socket to a privileged IP
sd, struct sockaddr_in
sd, struct sockaddr
functions are used to bind a socket descriptor to a privileged IP port, that
is, a port number in the range 0-1023. The
bindresvport() function operates solely on
AF_INET sockets, whereas the
bindresvport_sa() function is capable of binding
Only the superuser may bind to a privileged port; these functions will fail for any other user.
sd should be a socket descriptor that was returned by a call to socket(2).
If sin is not the NULL
pointer, sin->sin_family must be initialized to the
address family of the socket sd. If the value of
sin->sin_port is non-zero,
will attempt to use the specified port. Otherwise, a free port in the range
600-1023 will be chosen and, if the
bind(2) succeeds, sin->sin_port will be
updated with the port that was assigned.
If sin is the NULL
pointer, a free port in the range 600-1023 will be chosen (as above), but in
this case there is no way for
to communicate to the caller which port was assigned.
bindresvport() returns 0 if it is
successful, otherwise -1 is returned and errno set to
reflect the cause of the error.
bindresvport() function fails if:
- sd is not a valid descriptor.
- sd is not a socket.
- The specified address is not available from the local machine.
- The specified address is already in use.
- The socket is already bound to an address.
- The family of the socket and that requested in sa->sa_family are not equivalent.
- The requested address is protected, and the current user has inadequate permission to access it.
- The name parameter is not in a valid part of the user address space.
- Insufficient resources were available in the system to perform the operation.
- The protocol family has not been configured into the system, no implementation for it exists, or address family did not match between arguments.
bind(2), socket(2), rresvport(3), rresvport_af(3)