Provided by: manpages-ja-dev_0.5.0.0.20210215+dfsg-1_all bug

名前

       bindresvport - ソケットを特権 IP ポートにバインドする

書式

       #include <sys/types.h>
       #include <netinet/in.h>

       int bindresvport(int sockfd, struct sockaddr_in *sin);

説明

       bindresvport()   は、ソケットディスクリプターを特権無名 (privileged anonymous) IP ポートに
       バインドするのに使う。特権無名 IP ポートとは、 ポート番号が 512 から 1023 の範囲から任意に
       選択されるポートである。

       bindresvport()   によって実行された bind(2)  が成功し、 sin が NULL 以外の場合、実際に割り
       当てられたポート番号が sin->sin_port に入れて返される。

       sin には NULL を指定することもでき、その場合には sin->sin_family は暗黙のうちに AF_INET と
       みなされる。 しかし、この場合には、 bindresvport()  は実際に割り当てられたポート番号を返す
       手段を持たない (割り当てられたポート番号は、後で getsockname(2)  を使って取得できる)。

返り値

       bindresvport()  は成功すると 0 を返す。それ以外の場合、-1 を返し、 errno  にエラーの原因を
       示す値を設定する。

エラー

       bindresvport()   は bind(2)  と同じ原因で失敗する可能性がある。 さらに、以下のエラーが発生
       することがある:

       EACCES 呼び出し元がスーパーユーザーの特権を持っていなかった            (より正確に言うと、
              CAP_NET_BIND_SERVICE ケーパビリティが必要である)。

       EADDRINUSE
              全ての特権ポートが使用中である。

       EAFNOSUPPORT (glibc 2.7 以前では EPFNOSUPPORT)
              sin が NULL 以外で、かつ sin->sin_familyAF_INET でなかった。

属性

   マルチスレッディング (pthreads(7) 参照)
       glibc  2.17 より前のバージョンでは、 bindresvport() 関数は保護されていない静的変数を使用し
       ているため、スレッドセーフではない。

       glibc 2.17 以降では、 bindresvport()  関数は静的変数を保護するロックを使っており、スレッド
       セーフである。

準拠

       POSIX.1-2001 にはない。 BSD, Solaris およびその他の多くのシステムに存在する。

注意

       bindresvport()   のいくつかの実装と異なり、glibc の実装では呼び出し元が sin->sin_port で渡
       した値はどんな値であっても無視される。

関連項目

       bind(2), getsockname(2)

この文書について

       この man ページは Linux man-pages プロジェクトのリリース 3.79 の一部  である。プロジェクト
       の説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。

                                            2013-06-21                            BINDRESVPORT(3)