SO_LINGER
SO_LINGER は close() の動作を制御する。RST ですぐに切断するか、キューのデータが(タイムアウト付きで)排出されるのを待ってから閉じるかを選べる。
目的
シャットダウン前に確実に配送するか、接続を即座に解放するかのいずれかが必要な場面で、close() のセマンティクスを形作る。
メカニズム
linger オン+タイムアウトでは、close() はデータ送信完了かタイムアウトまでブロックし、その後 RST を送る。linger オフ(デフォルト)では close() は即座に戻り、残りのデータはバックグラウンドで送信される。異常切断には即時 RST を使う。
ユースケース
- 接続のグレースフルシャットダウン
- 接続の即時リセット
- サーバーのシャットダウン