104

オプションの正式な意味は理解できたと思います。私が現在扱っているいくつかのレガシーコードでは、オプションが使用されています。顧客は、側から近い接続で、側からの FIN への応答として RST について不満を述べています。

いつ使用すべきかわからないため、安全に削除できるかどうかわかりません。

オプションが必要になる場合の例を教えてください。

4

8 に答える 8

207
于 2012-10-26T14:29:46.287 に答える
90

タイムアウトをゼロに設定する一般的な理由SO_LINGERは、多数の接続がそのTIME_WAIT状態のままになり、サーバー上の利用可能なすべてのリソースを拘束することを避けるためです。

TCP 接続が正常に終了すると、終了を開始した側 (「アクティブ クローズ」) では、接続TIME_WAITが数分間維持されます。そのため、サーバーが接続のクローズを開始するプロトコルであり、存続期間の短い接続が非常に多数含まれている場合、この問題の影響を受けやすい可能性があります。

ただし、これは良い考えではありません。TIME_WAIT理由があります (古い接続からの漂遊パケットが新しい接続に干渉しないようにするため)。可能であれば、クライアントが接続のクローズを開始するようにプロトコルを再設計することをお勧めします。

于 2010-09-21T12:18:22.333 に答える
18

linger がオンでタイムアウトがゼロの場合、TCP スタックは接続を閉じる前に保留中のデータが送信されるのを待ちません。これによりデータが失われる可能性がありますが、このように linger を設定することで、これを受け入れて、接続を正常に閉じるのではなく、すぐにリセットするように求めています。これにより、通常の FIN ではなく RST が送信されます。

EJP のコメントに感謝します。詳細については、こちらを参照してください。

于 2010-09-21T07:15:31.170 に答える