tcpソケットが壊れたパイプエラーを直ちに報告できるかどうかを知りたいと思っています。現在、サーバーがダウンしたときにクライアント側でsigpipeシグナルを捕捉しています...しかし、私は、sigpipeシグナルが生成されたことがわかりました。 2番目のmsgがクライアントからサーバーに送信された後です。これは可能な理由は何でしょうか?他のソケットの終わりがダウンした場合、最初の送信はsigpipeを返さなければなりません。 この特殊な動作には何らかの説明がありますか?そして、これを回避するための可能な方法は?1回目の送信直後にSIGPIPEが生成されない
答えて
私はSO_KEEPALIVE
オプションを使用すると、壊れたリンクの検出をスピードアップするかもしれないと思います。
「SO_KEEPALIVE」は、一般に2時間ごとに送信されます。私は、接続状態をチェックする方法としては推奨しません。 –
それは調整可能ですが、いいえ、私はそれを推奨していません、私はオプションをカバーしています:) –
それは調節可能です...しかし、私はそうすることを推測するので、すべてのTCP接続に影響します.. – Srinivas
TCPスタックは、何回かの再送信試行の後にのみエラーを送出します。 IIRCの場合、TCP再送信タイマーは数秒に初期化され、再送信の数は通常5〜10です。このプロトコルは、データ交換中に到達不能になったピアを検出する他の手段をサポートしていません(つまり、誰かがサーバの電源ケーブルでトリップした)。
* TCPスタックは、何回かの再送信試行の後にのみエラーをスローします。*そのエラーと何時にTCPがそのエラーをスローするかを教えてください。 – Srinivas
スローされるエラーは多岐にわたり、ECONNRESETまたはECONNABORTEDまたはETIMEDOUTが発生する可能性があります。どのようにサーバーとルーターが遠ざかり、いつバックアップを取るか、そしていつ、いつ、いつ、いつまでかに依存します。エラーが出るまでの時間はOS /構成に依存しますが、ほとんどのOSでは数十秒になるでしょう。どこかのルータが別の経路を確立しようとしている場合には、長い間待たなければなりません。モデムにダイヤルするか、またはマイクロ波リンク上のスロットを取得しようとしています。プロトコルは何とかデータを配信するのが非常に難しく、そうしようとする時間が与えられなければなりません。 –
は、私はその可能TCP用のソケットがすぐ
パイプのもう一方の端を、ネットワークを介して任意の壊れたパイプのエラーを報告するかどうかを知りたいです。そのネットワークは遅く、信頼性が低い可能性があります。だから、パイプの片端は即座にそのパートナーがまだそこにいるかどうかは分かりません。遅れはかなり長くなる可能性があるので、O/Sはまたバッファリングを行う可能性が高い。これらの考慮事項により、破損したパイプをすぐに検出することは事実上不可能になります。
そして、すべての可能なこの
を回避する方法しかし、なぜあなたがしたいですか?パイプはトランスミッション中いつでも破損する可能性があるため、とにかく一般的なケースを処理する必要があります。
すぐに実行されない場合、ASAPは..yesを実行しますが、一般的なケースは、2回目の送信後にsigpipeが返され、誰かがconfigコマンドを与えた場合、最後のconfig cmdを送信する直前にソケットが破損する可能性があります。彼はそれを逃したことを知っています.. – Srinivas
@Srinivas「最後の設定cmdを送信する直前に彼はそれを見逃していたと知っています」あなたの*本当の*興味は、送信者が 'SIGPIPE '受信機で受信されましたか?送信者は受信者がコマンドの送信を完了したかどうか本当に知りたがっているので、これはあまり役に立ちません。そのためには、TCP/IP上にプロトコルを構築する必要があります。これは、受信者が完了したコマンドの確認を送信することです。 – Raedwald
私はクライアントが自動的に再接続したいと思っています。これは、シグナルハンドラに依存してジョブを実行しています。受信者が正常に実行を完了した後、受信者から応答が返ってきます...しかし、最後のcmdのために、彼はそれがbrokedソケットに起因するか、またはcmdを完了するために受信機の無能のためにあったかどうかを知っていません... – Srinivas
- 1. Spring sseEmitter、メソッドの送信直後にイベントが送信されない
- 2. 5回目のRestKitコールが送信されない
- 3. 通知を1回送信した後、登録されていないトークンエラーが発生しました
- 4. Javascriptで生成されたフォームが送信されない
- 5. 動的作成後にフォームが送信されない
- 6. 2回のキーダウンイベントの後で、3回目の受信が受信されない場合があります。
- 7. インストール直後にAndroid放送受信機が呼び出されない
- 8. NAudio生成エラー(後の2回目と)
- 9. AJAXの検証が成功した後にHTMLフォームが送信されない
- 10. ログインフォームの送信後にクッキーが設定されていない
- 11. JavaFX Comboboxが1回目と2回目のクリックからクリックされた値に変更されない
- 12. ReloadingCombinedConfigurationBuilderが1回のリロード後にリロードされない
- 13. ブートストラップの統合後にレールが送信されない
- 14. フォームの送信後に変数が変更されない
- 15. Outlook 2010のhtmlフッターフォントファミリーが送信後に適用されない
- 16. Expressで1回送信した後にデータを再送信しないようにする方法
- 17. レスポンスが送信されず、httpヘッダーデータが送信されない
- 18. アプリケーションがプレイストアに送信された後に機能しない
- 19. 送信者ビュー生成されたロック
- 20. ページビューが既に送信された後、GAトラックの作成者
- 21. プログラム受信信号SIGPIPE、壊れたパイプ?
- 22. 2回目の使用時に保存エラーが送信される
- 23. rpmの2回目のインストールでシンボリックリンクが作成されない
- 24. PHP double whileループ、2回目のループが1回以上反復されない
- 25. 1回目の実行後にQTCreator segfault
- 26. Android:SoundPoolで無限にサウンドを再生すると、停止後に2回目が再生されない
- 27. 送信ボタンをクリックした後に動的に生成されたドロップダウンメニュー項目を維持する方法。
- 28. Firebaseクラウドメッセージングで新しい送信者IDが生成される
- 29. フォームを送信した後に画像がアップロードされない
- 30. HTML、PHP:フォーム送信後に変数が表示されない
私はどのようにして、サーバーがダウンした検出う –
...あなたはあまりにも多くを求めていると思いますか?どうやって落ちましたか? – jpalecek
接続からの読み取りを試みると、クローズされた接続が通知されます。 –