ネットワークプログラミング相談室 Port28

このエントリーをはてなブックマークに追加
900デフォルトの名無しさん
議論が混乱しているみたいなので、整理してみる....

SO_KEEPALIVEの目的は二つある
・APの無通信状態が継続していてもTCPコネクションの自動切断を抑止する
  ==>「放置されても接続が破棄されにくくすることが出来る(>>890)」
・下位層異常を検知してTCPコネクションを自動的に切断する
  ==> 「SO_KEEPALIVEを設定した(投げる)側だけが切断を検知できる(>>885,893)」

つまり、>>890>>885,893の指摘のどちらも「TCPコネクション接続後の自動切断処理」について
話しているから、両者の指摘はともに間違いではない
ただし、今の時代はWAN(広域ネットワーク)でも常時接続サービスが一般化しているから、
前者(>>890の自動切断の抑止)を目的にSO_KEEPALIVEを設定するケースは極めて限られると思う

そして、「TCPコネクション接続時のエラー検知処理」にSO_KEEPALIVEを利用しようという
質問者(>>881,886)の考え方が間違っている(=SO_KEEPALIVEの目的を誤解している)、と言える