Linux C プログラミングで setsockopt と getsockopt を使用して、壊れた tcp/ip 接続を判断する方法を教えてください。
3 に答える
TCPのマニュアルページから:
TCP ソケット オプションを設定または取得するには、オプション レベル引数を に設定して、オプションの
getsockopt(2)
読み取りまたは書き込みを呼び出します。setsockopt(2)
IPPROTO_TCP
関連するオプションは次のとおりです。
TCP_KEEPCNT
(Linux 2.4 以降)
接続を切断する前に TCP が送信するキープアライブ プローブの最大数。このオプションは、移植性を意図したコードでは使用しないでください。
TCP_KEEPIDLE
(Linux 2.4 以降)
ソケット オプション SO_KEEPALIVE がこのソケットに設定されている場合、TCP がキープアライブ プローブの送信を開始する前に、接続がアイドル状態を維持する必要がある時間 (秒単位)。このオプションは、移植性を意図したコードでは使用しないでください。
TCP_KEEPINTVL
(Linux 2.4 以降)
個々のキープアライブ プローブ間の時間 (秒単位)。このオプションは、移植性を意図したコードでは使用しないでください。
例:
int keepcnt = 5;
int keepidle = 30;
int keepintvl = 120;
setsockopt(sock, IPPROTO_TCP, TCP_KEEPCNT, &keepcnt, sizeof(int));
setsockopt(sock, IPPROTO_TCP, TCP_KEEPIDLE, &keepidle, sizeof(int));
setsockopt(sock, IPPROTO_TCP, TCP_KEEPINTVL, &keepintvl, sizeof(int));
ソケット オプション SO_KEEPALIVE を使用すると役立つ場合があります。APUE からのコード:
int keepalive = 1;
setsockopt(fd, SOL_SOCKET, SO_KEEPALIVE, &keepalive , sizeof(keepalive ));
これを参照してください:壊れたソケットの検出