BINDRESVPORT(3) | Library Functions Manual | BINDRESVPORT(3)

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

# SEE ALSO

bind(2), socket(2), rresvport(3), rresvport_af(3)

June 5, 2013 | Debian