| .\" Copyright (C) 2007, Michael Kerrisk <mtk.manpages@gmail.com> |
| .\" and Copyright (C) 2008, Linux Foundation, written by Michael Kerrisk |
| .\" <mtk.manpages@gmail.com> |
| .\" |
| .\" %%%LICENSE_START(VERBATIM) |
| .\" Permission is granted to make and distribute verbatim copies of this |
| .\" manual provided the copyright notice and this permission notice are |
| .\" preserved on all copies. |
| .\" |
| .\" Permission is granted to copy and distribute modified versions of this |
| .\" manual under the conditions for verbatim copying, provided that the |
| .\" entire resulting derived work is distributed under the terms of a |
| .\" permission notice identical to this one. |
| .\" |
| .\" Since the Linux kernel and libraries are constantly changing, this |
| .\" manual page may be incorrect or out-of-date. The author(s) assume no |
| .\" responsibility for errors or omissions, or for damages resulting from |
| .\" the use of the information contained herein. The author(s) may not |
| .\" have taken the same level of care in the production of this manual, |
| .\" which is licensed free of charge, as they might when working |
| .\" professionally. |
| .\" |
| .\" Formatted or processed versions of this manual, if unaccompanied by |
| .\" the source, must acknowledge the copyright and authors of this work. |
| .\" %%%LICENSE_END |
| .\" |
| .\" 2007-05-31, mtk: Rewrite and substantial additional text. |
| .\" 2008-12-03, mtk: Rewrote some pieces and fixed some errors |
| .\" |
| .TH BINDRESVPORT 3 2021-03-22 "" "Linux Programmer's Manual" |
| .SH NAME |
| bindresvport \- bind a socket to a privileged IP port |
| .SH SYNOPSIS |
| .nf |
| .B #include <sys/types.h> |
| .B #include <netinet/in.h> |
| .PP |
| .BI "int bindresvport(int " sockfd ", struct sockaddr_in *" sin ); |
| .fi |
| .SH DESCRIPTION |
| .BR bindresvport () |
| is used to bind the socket referred to by the |
| file descriptor |
| .I sockfd |
| to a privileged anonymous IP port, |
| that is, a port number arbitrarily selected from the range 512 to 1023. |
| .\" Glibc actually starts searching with a port # in the range 600 to 1023 |
| .PP |
| If the |
| .BR bind (2) |
| performed by |
| .BR bindresvport () |
| is successful, and |
| .I sin |
| is not NULL, then |
| .I sin\->sin_port |
| returns the port number actually allocated. |
| .PP |
| .I sin |
| can be NULL, in which case |
| .I sin\->sin_family |
| is implicitly taken to be |
| .BR AF_INET . |
| However, in this case, |
| .BR bindresvport () |
| has no way to return the port number actually allocated. |
| (This information can later be obtained using |
| .BR getsockname (2).) |
| .SH RETURN VALUE |
| .BR bindresvport () |
| returns 0 on success; otherwise \-1 is returned and |
| .I errno |
| is set to indicate the error. |
| .SH ERRORS |
| .BR bindresvport () |
| can fail for any of the same reasons as |
| .BR bind (2). |
| In addition, the following errors may occur: |
| .TP |
| .BR EACCES |
| The calling process was not privileged |
| (on Linux: the calling process did not have the |
| .B CAP_NET_BIND_SERVICE |
| capability in the user namespace governing its network namespace). |
| .TP |
| .B EADDRINUSE |
| All privileged ports are in use. |
| .TP |
| .BR EAFNOSUPPORT " (" EPFNOSUPPORT " in glibc 2.7 and earlier)" |
| .I sin |
| is not NULL and |
| .I sin\->sin_family |
| is not |
| .BR AF_INET . |
| .SH ATTRIBUTES |
| For an explanation of the terms used in this section, see |
| .BR attributes (7). |
| .ad l |
| .nh |
| .TS |
| allbox; |
| lb lb lbx |
| l l l. |
| Interface Attribute Value |
| T{ |
| .BR bindresvport () |
| T} Thread safety T{ |
| glibc\ >=\ 2.17: MT-Safe; |
| .\" commit f6da27e53695ad1cc0e2a9490358decbbfdff5e5 |
| glibc\ <\ 2.17: MT-Unsafe |
| T} |
| .TE |
| .hy |
| .ad |
| .sp 1 |
| .PP |
| The |
| .BR bindresvport () |
| function uses a static variable that was not protected by a lock |
| before glibc 2.17, rendering the function MT-Unsafe. |
| .SH CONFORMING TO |
| Not in POSIX.1. |
| Present on the BSDs, Solaris, and many other systems. |
| .SH NOTES |
| Unlike some |
| .BR bindresvport () |
| implementations, |
| the glibc implementation ignores any value that the caller supplies in |
| .IR sin\->sin_port . |
| .SH SEE ALSO |
| .BR bind (2), |
| .BR getsockname (2) |