NAME
bindresvport
,
bindresvport_sa
—
bind a socket to a privileged IP
port
SYNOPSIS
#include
<sys/types.h>
#include <netinet/in.h>
int
bindresvport
(int
sd, struct sockaddr_in
*sin);
int
bindresvport_sa
(int
sd, struct sockaddr
*sa);
DESCRIPTION
The
bindresvport
()
and
bindresvport_sa
()
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
both AF_INET
and AF_INET6
sockets.
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,
bindresvport
()
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
bindresvport
()
to communicate to the caller which port was assigned.
RETURN VALUES
bindresvport
() returns 0 if it is
successful, otherwise -1 is returned and errno set to
reflect the cause of the error.
ERRORS
The bindresvport
() function fails if:
- [
EBADF
] - sd is not a valid descriptor.
- [
ENOTSOCK
] - sd is not a socket.
- [
EADDRNOTAVAIL
] - The specified address is not available from the local machine.
- [
EADDRINUSE
] - The specified address is already in use.
- [
EINVAL
] - The socket is already bound to an address.
- [
EINVAL
] - The family of the socket and that requested in sa->sa_family are not equivalent.
- [
EACCES
] - The requested address is protected, and the current user has inadequate permission to access it.
- [
EFAULT
] - The name parameter is not in a valid part of the user address space.
- [
ENOBUFS
] - Insufficient resources were available in the system to perform the operation.
- [
EPFNOSUPPORT
] - The protocol family has not been configured into the system, no implementation for it exists, or address family did not match between arguments.