TCPソケットが破損したパイプエラーをすぐに報告できるかどうかを知りたい. 現在、サーバーがダウンしたときにクライアント側でsigpipe信号をキャッチしています...しかし、sigpipe信号は、クライアントからサーバーに2番目のメッセージが送信された後にのみ生成されることがわかりました。これの考えられる理由は何ですか?? もう一方のソケットの端がダウンした場合、最初の送信は sigpipe を返さなければなりません..その信号はすぐに生成されません..?? この独特の振る舞いに何か説明はありますか?? そして、これを回避する方法はありますか??
3 に答える
1
TCP スタックは、再送信が何度か試行された後にのみエラーをスローします。IIRC、TCP 再送信タイマーは、いくつかの短い秒数に初期化され、再送信の回数は通常 5 ~ 10 です。このプロトコルは、データ交換中に到達不能になったピアを検出する他の手段をサポートしていません (つまり、誰かがサーバーの電源ケーブルにつまずいた)。
于 2012-01-19T12:23:07.777 に答える
0
SO_KEEPALIVE
オプションを使用すると、リンク切れの検出が高速化される可能性があると思います。
于 2012-01-19T10:57:29.007 に答える
0
TCPソケットが破損したパイプエラーをすぐに報告できるかどうかを知りたい
パイプの反対側はネットワークを経由しています。そのネットワークは低速で信頼性が低い可能性があります。したがって、パイプの一方の端は、パートナーがまだそこにいるかどうかを即座に判断することはできません. 遅延はかなり長くなる可能性があるため、O/S もバッファリングを行う可能性があります。これらの考慮事項により、破損したパイプをすぐに検出することは事実上不可能になります。
そして、これを回避する可能な方法
しかし、なぜあなたはしたいのですか?パイプは送信中にいつでも破損する可能性があるため、とにかく一般的なケースを処理する必要があります。
于 2012-01-19T13:44:45.973 に答える