0

クライアントはパッケージをサーバーにループ送信します。クライアントプログラムはSIGPIPEをキャッチしません。(クライアントOSはubuntuサーバー12.04 LTSです)

私は次のテストを行います:

  1. 3回のハンドシェイクが終了した後。次に、クライアントはいくつかのパッケージをサーバーに送信します。サーバーは通常のパッケージを受け取ることができます。

  2. それから私は突然サーバープロセスを殺します。

  3. クライアントプロセスが停止しています。しかし、「壊れたパイプ」というログが表示されません。

バッシュは死んだ原因を報告すると思います。

プロセスが停止した後、bashが「Brokenpipe」ログを印刷しないのはなぜですか?

しかし、私はgdbを使用してプロセスを開始し、上の手順を繰り返します。プロセスが停止し、gdbは次のログを表示します。

「プログラム受信信号SIGPIPE、パイプの破損。」

4

1 に答える 1

2

クライアントがSIGPIPEをキャッチしない場合、エラーメッセージを出力できない可能性があります。「Brokenpipe」という形式のメッセージは、書き込みエラーへの応答または信号への応答としてSIGPIPEを受信するプログラムによって出力されます。クライアントはSIGPIPEを処理していないため、そのエラーメッセージを出力せず、終了するだけです。gdb内で実行すると、gdbは、SIGPIPEが原因で子プロセスが終了したことを通知します。

于 2012-11-16T01:33:40.827 に答える