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

名前

       getsockopt, setsockopt - ソケットのオプションの設定と取得を行なう

書式

       #include <sys/types.h>          /* 「注意」参照 */
       #include <sys/socket.h>

       int getsockopt(int sockfd, int level, int optname,
                      void *optval, socklen_t *optlen);
       int setsockopt(int sockfd, int level, int optname,
                      const void *optval, socklen_t optlen);

説明

       getsockopt()   と setsockopt()  は、ファイルディスクリプター socket で参照されるソケットに
       関連するオプションの操作を行う。 オプションは複数のプロトコル層(level)に存在するかもしれな
       いが、 これらは常に最上位のソケット層へと設定される。

       ソケットオプションを操作する際には、オプションの層 (level) と オプションの名前を指定しなけ
       ればならない。 ソケット API 層でオプションを操作する為には、 levelSOL_SOCKET  に指定す
       る。 他の全ての層でオプションを操作する為には、与えられたオプションの 制御主体となるプロト
       コルのプロトコル番号を指定する。例えば、 オプションが TCP プロトコルで解釈されるべきことを
       指示するには、  levelTCP のプロトコル番号を指定しなければならない。 getprotoent(3)  を
       参照すること。

       optvaloptlen 引き数は  setsockopt()   のオプションの値にアクセスするために用いられる。
       getsockopt()    では要求したオプションの値を返すためのバッファーを指定する。  getsockopt()
       では  optlen  は値と結果両用の引き数で、最初に  optval  の指しているバッファーのサイズを与
       え、実際に返される値のサイズに  書き換えられる。もしオプション値を与えず、返されもしない場
       合には optval は NULL でも良い。

       optname および指定されたオプションは解釈されずに、適切なプロトコルモジュールに  渡されて解
       釈される。インクルードファイル <sys/socket.h> には後述のソケット層のオプションの定義が含ま
       れている。 他のプロトコル層では名前や形式は異なる。 マニュアルのセクション 4  の適切なエン
       トリーを参照すること。

       ほとんどのソケット層のオプションは  optvalint 引き数を利用する。 setsockopt() で、二
       値(boolean)オプションを有効(enable)にするにはゼロ以外を指定し、  無効(disable)にするにはゼ
       ロを指定する。

       利用可能なソケットオプションの説明に関しては、  socket(7)  と適切なプロトコルの man ページ
       を参照のこと。

返り値

       成功した場合にはゼロが返される。エラー時には -1 が返され、 errno が適切に設定される。

エラー

       EBADF     引き数 sockfd は有効なディスクリプターでない。

       EFAULT    optval        で指定されたアドレスがプロセスのアドレス空間の有効な部分ではない。
                 getsockopt()  の場合、 optlen がプロセスのアドレス空間の有効な部分でない場合にも
                 このエラーが返される。

       EINVAL    setsockopt()  で option が不正である。 optval に無効な値が指定された場合にも、こ
                 のエラーが発生する可能性がある  (例えば、  ip(7)  に説明がある IP_ADD_MEMBERSHIP
                 オプションなど)。

       ENOPROTOOPT
                 指定された層(level)にはこのオプションは存在しない。

       ENOTSOCK  引き数 sockfd がソケットではなくファイルである。

準拠

       SVr4, 4.4BSD (これらのシステムコールは 4.2BSD で最初に現れた), POSIX.1-2001.

注意

       POSIX.1-2001 では <sys/types.h>  のインクルードは必須とされておらず、  Linux  ではこのヘッ
       ダーファイルは必要ではない。  しかし、歴史的には、いくつかの実装  (BSD  系) でこのヘッダー
       ファイルが 必要であり、移植性が必要なアプリケーションではこのファイルを インクルードするの
       が賢明であろう。

       getsockopt()   と setsockopt()  の optlen 引き数は実際は int [*] である (そして 4.x BSD と
       libc4 と libc5 はそうなっている)。 POSIX では紆余曲折を経て現在の socklen_t になっており、
       glibc でも socklen_t を使っている。 accept(2)  も参照のこと。

バグ

       ソケットのオプションのいくつかはシステムのより低い層で 処理されるべきである。

関連項目

       ioctl(2),  socket(2),  getprotoent(3),  protocols(5), ip(7), packet(7), socket(7), tcp(7),
       udp(7), unix(7)

この文書について

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