0

明らかな理由もなく SIGPIPE について聞いたことがある人はいますか? SIGPIPE でクラッシュしたプログラムがあります。signal(SIGPIPE, SIG_IGN); でクラッシュを防ぎました。好奇心から、私は他に何もしませんでした。つまり、エラー処理はしませんでした。驚いたことに、コードは正常に動作します。1 つのソケットを介して別のプログラムと通信します。また、ソケットを介したデータ転送は、SIGPIPE の後でも完全に機能します。これは可能ですか?一時的なネットワーク障害による SIGPIPE?

4

1 に答える 1

3

これが *nix でのソケットの動作です。

基本的に何が起こったかというと、ピアによってリセットされた TCP ソケットで write()/send() などを実行したことです。これにより、デフォルトで、アプリケーションを終了する SIGPIPE シグナルが発生します。

これに対処する一般的な方法は、既に行ったように SIGPIPE シグナルを単純に無視し、代わりに write()/send() からのエラー戻り値を処理することです。

詳細については、ここを参照してください。章 2.19 および 2.22 を参照してください。

于 2013-01-25T18:07:14.047 に答える