明らかな理由もなく SIGPIPE について聞いたことがある人はいますか? SIGPIPE でクラッシュしたプログラムがあります。signal(SIGPIPE, SIG_IGN); でクラッシュを防ぎました。好奇心から、私は他に何もしませんでした。つまり、エラー処理はしませんでした。驚いたことに、コードは正常に動作します。1 つのソケットを介して別のプログラムと通信します。また、ソケットを介したデータ転送は、SIGPIPE の後でも完全に機能します。これは可能ですか?一時的なネットワーク障害による SIGPIPE?
1 に答える
3
これが *nix でのソケットの動作です。
基本的に何が起こったかというと、ピアによってリセットされた TCP ソケットで write()/send() などを実行したことです。これにより、デフォルトで、アプリケーションを終了する SIGPIPE シグナルが発生します。
これに対処する一般的な方法は、既に行ったように SIGPIPE シグナルを単純に無視し、代わりに write()/send() からのエラー戻り値を処理することです。
詳細については、ここを参照してください。章 2.19 および 2.22 を参照してください。
于 2013-01-25T18:07:14.047 に答える