-.TP
-.\"O .BR SO_RCVTIMEO " and " SO_SNDTIMEO
-.BR SO_RCVTIMEO " と " SO_SNDTIMEO
-.\"O .\" Not implemented in 2.0.
-.\"O .\" Implemented in 2.1.11 for getsockopt: always return a zero struct.
-.\"O .\" Implemented in 2.3.41 for setsockopt, and actually used.
-.\" 2.0 では実装されていない。
-.\" getsockopt については 2.1.11 で実装された。常に 0 の構造体を返す。
-.\" setsockopt については 2.3.41 で実装され、実際に使われている。
-.\"O Specify the receiving or sending timeouts until reporting an error.
-.\"O The argument is a
-.\"O .IR "struct timeval" .
-.\"O If an input or output function blocks for this period of time, and
-.\"O data has been sent or received, the return value of that function
-.\"O will be the amount of data transferred; if no data has been transferred
-.\"O and the timeout has been reached then \-1 is returned with
-.\"O .I errno
-.\"O set to
-.\"O .B EAGAIN
-.\"O or
-.\"O .B EWOULDBLOCK
-.\"O .\" in fact to EAGAIN
-.\"O just as if the socket was specified to be nonblocking.
-.\"O If the timeout is set to zero (the default)
-.\"O then the operation will never timeout.
-送信・受信のタイムアウトを指定する。これを越えるとエラーを報告する。
-引き数は
-.I "struct timeval"
-である。
-入出力関数がタイムアウト時間の間ブロックされ、かつデータの送信または
-受信が行われていた場合は、転送されたデータ量が関数の返り値となる。
-何もデータが転送されずにタイムアウトに達した場合は、
-\-1 を返し、
-.I errno
-に
-.B EAGAIN
-か
-.B EWOULDBLOCK
-を設定され、
-.\" 実際には EAGAIN が設定される
-あたかもソケットに非ブロッキングが指定されたように見える。
-タイムアウト値に (デフォルト値である) 0 に設定すると、
-操作は決してタイムアウトしなくなる。
-.\"O Timeouts only have effect for system calls that perform socket I/O (e.g.,
-.\"O .BR read (2),
-.\"O .BR recvmsg (2),
-.\"O .BR send (2),
-.\"O .BR sendmsg (2));
-.\"O timeouts have no effect for
-.\"O .BR select (2),
-.\"O .BR poll (2),
-.\"O .BR epoll_wait (2),
-.\"O etc.
-タイムアウトが影響を及ぼすのは、
-ソケット I/O を実行するシステムコールだけ
-(例えば
-.BR read (2),
-.BR recvmsg (2),
-.BR send (2),
-.BR sendmsg (2))
-である。
-.BR select (2),
-.BR poll (2),
-.BR epoll_wait (2)
-などにはタイムアウトは影響を及ぼさない。
-.TP
-.B SO_REUSEADDR
-.\"O Indicates that the rules used in validating addresses supplied in a
-.\"O .BR bind (2)
-.\"O call should allow reuse of local addresses.
-.\"O For
-.\"O .B AF_INET
-.\"O sockets this
-.\"O means that a socket may bind, except when there
-.\"O is an active listening socket bound to the address.
-.\"O When the listening socket is bound to
-.\"O .B INADDR_ANY
-.\"O with a specific port then it is not possible
-.\"O to bind to this port for any local address.
-.\"O Argument is an integer boolean flag.
-.BR bind (2)
-コールに与えられたアドレスが正しいかを判断するルールで、
-ローカルアドレスの再利用を可能にする。
-つまり
-.B AF_INET
-ソケットなら、そのアドレスにバインドされたアクティブな listen
-状態のソケットが存在しない限り、バインドが行える。
-listen 状態のソケットがアドレス
-.B INADDR_ANY
-で特定のポートにバインドされている場合には、
-このポートに対しては、どんなローカルアドレスでもバインドできない。
-引き数はブール整数のフラグである。
-.TP
-.B SO_SNDBUF
-.\"O Sets or gets the maximum socket send buffer in bytes.
-.\"O The kernel doubles this value (to allow space for bookkeeping overhead)
-.\"O when it is set using
-.\"O .\" Most (all?) other implementations do not do this -- MTK, Dec 05
-.\"O .BR setsockopt (2),
-.\"O and this doubled value is returned by
-.\"O .BR getsockopt (2).
-.\"O The default value is set by the
-.\"O .I /proc/sys/net/core/wmem_default
-.\"O file and the maximum allowed value is set by the
-.\"O .I /proc/sys/net/core/wmem_max
-.\"O file.
-.\"O The minimum (doubled) value for this option is 2048.
-ソケットの送信バッファの最大サイズを設定・取得する (バイト単位)。
-.BR setsockopt (2)
-を使って値が設定されたときに (管理オーバヘッド用の領域を確保するために)
-カーネルはこの値を 2倍し、
-.\" 他のほとんどの (全ての?) 実装ではこんなことは行っていない -- MTK, Dec 05
-.BR getsockopt (2)
-はこの 2倍された値を返す。
-デフォルトの値は
-.I /proc/sys/net/core/wmem_default
-ファイルで設定され、許容される最大の値は
-.I /proc/sys/net/core/wmem_max
-ファイルで設定される。
-このオプションの最小値は (2倍した値で) 2048 である。
-.TP
-.\"O .BR SO_SNDBUFFORCE " (since Linux 2.6.14)"
-.BR SO_SNDBUFFORCE " (Linux 2.6.14 以降)"
-.\"O Using this socket option, a privileged
-.\"O .RB ( CAP_NET_ADMIN )
-.\"O process can perform the same task as
-.\"O .BR SO_SNDBUF ,
-.\"O but the
-.\"O .I wmem_max
-.\"O limit can be overridden.
-このソケットオプションを使うと、特権プロセス
-.RB ( CAP_NET_ADMIN
-を持つプロセス) は
-.B SO_SNDBUF
-と同じことを実行できる。
-ただし、上限
-.I wmem_max
-を上書きすることができる。
-.TP
-.B SO_TIMESTAMP
-.\"O Enable or disable the receiving of the
-.\"O .B SO_TIMESTAMP
-.\"O control message.
-.\"O The timestamp control message is sent with level
-.\"O .B SOL_SOCKET
-.\"O and the
-.\"O .I cmsg_data
-.\"O field is a
-.\"O .I "struct timeval"
-.\"O indicating the
-.\"O reception time of the last packet passed to the user in this call.
-.\"O See
-.\"O .BR cmsg (3)
-.\"O for details on control messages.
-.B SO_TIMESTAMP
-制御メッセージの受信を有効/無効にする。
-タイムスタンプ制御メッセージはレベル
-.B SOL_SOCKET
-で送信され、
-.I cmsg_data
-フィールドはこのシステムコールでユーザに渡した
-最後のパケットの受信時刻を示す
-.I "struct timeval"
-である。
-制御メッセージの詳細については
-.BR cmsg (3)
-を参照。
-.TP
-.B SO_TYPE
-.\"O Gets the socket type as an integer (like
-.\"O .BR SOCK_STREAM ).
-.\"O Can only be read
-.\"O with
-.\"O .BR getsockopt (2).
-ソケットのタイプを整数で取得する (例:
-.BR SOCK_STREAM )。
-.BR getsockopt (2)
-からのみ読み出し可能である。
-.\"O .SS Signals
+バッファ中に溜めることのできるデータの最小値を指定する。 このサイズを越えると、ソケット層はそのデータをプロトコルに渡し
+(\fBSO_SNDLOWAT\fP)、 受信時にはユーザに渡す (\fBSO_RCVLOWAT\fP)。 これら二つの値は 1 に初期化される。
+\fBSO_SNDLOWAT\fP は Linux では変更できない (\fBsetsockopt\fP(2) は \fBENOPROTOOPT\fP
+エラーで失敗する)。 \fBSO_RCVLOWAT\fP は Linux 2.4 以降でのみ変更可能である。 現状、Linux ではシステムコール
+\fBselect\fP(2) と \fBpoll\fP(2) は \fBSO_RCVLOWAT\fP の設定を考慮に入れずに動作し、
+データが1バイト利用可能になっただけでも、 ソケットは読み出し可能とのマークをつける。 一方、それに続けて行うソケットからの read は
+\fBSO_RCVLOWAT\fP バイトのデータが利用可能になるまで停止してしまう。
+.TP
+\fBSO_RCVTIMEO\fP と \fBSO_SNDTIMEO\fP
+.\" Not implemented in 2.0.
+.\" Implemented in 2.1.11 for getsockopt: always return a zero struct.
+.\" Implemented in 2.3.41 for setsockopt, and actually used.
+.\" in fact to EAGAIN
+送信・受信のタイムアウトを指定する。これを越えるとエラーを報告する。 引き数は \fIstruct timeval\fP である。
+入出力関数がタイムアウト時間の間ブロックされ、かつデータの送信または 受信が行われていた場合は、転送されたデータ量が関数の返り値となる。
+何もデータが転送されずにタイムアウトに達した場合は、 \-1 を返し、 \fIerrno\fP に \fBEAGAIN\fP か \fBEWOULDBLOCK\fP か
+\fBEINPROGRESS\fP (\fBconnect\fP(2) の場合) が設定され、 あたかもソケットに非ブロッキングが指定されたように見える。
+タイムアウト値に (デフォルト値である) 0 に設定すると、 操作は決してタイムアウトしなくなる。 タイムアウトが影響を及ぼすのは、 ソケット I/O
+を実行するシステムコールだけ (例えば \fBread\fP(2), \fBrecvmsg\fP(2), \fBsend\fP(2), \fBsendmsg\fP(2))
+である。 \fBselect\fP(2), \fBpoll\fP(2), \fBepoll_wait\fP(2) などにはタイムアウトは影響を及ぼさない。
+.TP
+\fBSO_REUSEADDR\fP
+\fBbind\fP(2) コールに与えられたアドレスが正しいかを判断するルールで、 ローカルアドレスの再利用を可能にする。 つまり \fBAF_INET\fP
+ソケットなら、そのアドレスにバインドされたアクティブな listen 状態のソケットが存在しない限り、バインドが行える。 listen
+状態のソケットがアドレス \fBINADDR_ANY\fP で特定のポートにバインドされている場合には、
+このポートに対しては、どんなローカルアドレスでもバインドできない。 引き数はブール整数のフラグである。
+.TP
+\fBSO_RXQ_OVFL\fP (Linux 2.6.33 以降)
+.\" commit 3b885787ea4112eaa80945999ea0901bf742707f
+最後の受信パケットとこの受信パケットの間にそのソケットで捨てられた (ドロップされた) パケット数を示す、unsigned 32
+ビット値の補助メッセージ (cmsg) を受信した skb に付与することを指示する。
+.TP
+\fBSO_SNDBUF\fP
+.\" Most (all?) other implementations do not do this -- MTK, Dec 05
+.\" See also the comment to SO_RCVBUF (17 Jul 2012 LKML mail)
+ソケットの送信バッファの最大サイズを設定・取得する (バイト単位)。 \fBsetsockopt\fP(2) を使って値が設定されたときに
+(管理オーバヘッド用の領域を確保するために) カーネルはこの値を 2倍し、 \fBgetsockopt\fP(2) はこの 2倍された値を返す。
+デフォルトの値は \fI/proc/sys/net/core/wmem_default\fP ファイルで設定され、許容される最大の値は
+\fI/proc/sys/net/core/wmem_max\fP ファイルで設定される。 このオプションの最小値は (2倍した値で) 2048 である。
+.TP
+\fBSO_SNDBUFFORCE\fP (Linux 2.6.14 以降)
+このソケットオプションを使うと、特権プロセス (\fBCAP_NET_ADMIN\fP を持つプロセス) は \fBSO_SNDBUF\fP
+と同じことを実行できる。 ただし、上限 \fIwmem_max\fP を上書きすることができる。
+.TP
+\fBSO_TIMESTAMP\fP
+\fBSO_TIMESTAMP\fP 制御メッセージの受信を有効/無効にする。 タイムスタンプ制御メッセージはレベル \fBSOL_SOCKET\fP で送信され、
+\fIcmsg_data\fP フィールドはこのシステムコールでユーザに渡した 最後のパケットの受信時刻を示す \fIstruct timeval\fP である。
+制御メッセージの詳細については \fBcmsg\fP(3) を参照。
+.TP
+\fBSO_TYPE\fP
+ソケットのタイプを整数で取得する (例: \fBSOCK_STREAM\fP)。
+このソケットオプションは読み出し専用である。
+.TP
+\fBSO_BUSY_POLL\fP (Linux 3.11 以降)
+データがなかった際にブロッキング受信での busy polling のおおよその時間をマイクロ秒単位で設定する。 この値を増やすには
+\fBCAP_NET_ADMIN\fP ケーパビリティが必要である。 このオプションのデフォルト値は
+\fI/proc/sys/net/core/busy_read\fP で制御できる。
+
+\fI/proc/sys/net/core/busy_poll\fP の値により、 \fBSO_BUSY_POLL\fP がセットされたソケットに対して
+\fBselect\fP(2) や \fBpoll\fP(2) を行い、報告すべきイベントがない場合に、 \fBselect\fP(2) や \fBpoll\fP(2) が
+busy polling をどのくらいの時間行うかが決まる。
+
+どちらの場合も、busy polling は、そのソケットが最後にデータを受信したネットワークデバイスがこのオプションに対応している場合のみ行われる。
+
+busy polling により遅延が改善されるはアプリケーションもあるが、 busy polling は CPU
+使用率と電力使用量をともに増加させることになるので、使用する際は注意して行うこと。