Linux で setsockopt() を使う方法
Linuxのsetsockopt()関数は、ソケットオプションを設定するために使用します。そのプロトタイプは以下の通りです。
int setsockopt(int sockfd, int level, int optname, const void *optval, socklen_t optlen);
パラメータの説明:
- sockfd: ソケットファイルディスクリプタ。
- 階層:プロトコルの使用される階層。
- オプトネーム:オプションの名前。
- **optval:**オプションの値に指すポインタ
- オプションの長さ
setsockopt 関数では、ソケットの様々なオプションを設定可能で、たとえばSO_REUSEADDR オプションを設定するとソケットの終了後にすぐにポートを解放でき、SO_RCVBUF、SO_SNDBUF オプションを設定するとソケットの受信および送信バッファサイズを調整でき、SO_KEEPALIVE オプションを設定するとソケットの接続を維持できます。
よく使われるオプション名とその使い途は次のとおりです。
- SOL_SOCKET:ソケットオプションを指定するための定数。SO_REUSEADDR:アドレスが再利用可能かどうかを設定。
SO_RCVBUF:受信バッファーのサイズを設定。
SO_SNDBUF:送信バッファーのサイズを設定。
SO_KEEPALIVE:キープアライブを設定。
SO_BROADCAST:ブロードキャストを設定。 - IPPROTO_TCP:TCP протокоルのオプション。TCP_NODELAY:Nagle アルゴリズムを無効に。
例えば、以下のコードスニペットは、`SO_REUSEADDR` オプションの設定方法を示しています。
int sockfd = socket(AF_INET, SOCK_STREAM, 0);
int reuse = 1;
setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &reuse, sizeof(reuse));
ソケット作成時に SO_REUSEADDR オプションをセットすることで、ソケットを クローズした直後に、そのポートを待機クローズ状態であっても 即座に bind(2) できるようになります。