Linux TCPソケット経由で通信するネットワークアプリケーションを作成します。私は最近、私のアプリケーションをクラッシュさせるシステムコールを送信することに気づいた。両方のピアが稼働しているときはうまく動作します(現在クラッシュ復旧をテスト中です)。しかし、1つのピアがダウンすると、このコードを実行するとクラッシュします。Linux TCPソケットクラッシュ
fprintf(stderr, "out_tcp %d\n", out_tcp);
if(send(out_tcp, &packet, sizeof(packet), 0) == -1)
fprintf(stderr, "send TCP error");
fprintf(stderr, "after send");
ソケットはすでに準備され、接続されており、2番目のピアがダウンする前に数回実行されました。私はこのコードが-1の値を返すことを期待していますが、出力では "out_tcp 11"しか生成せずにアプリケーションを終了します。エラーメッセージはありません。送信された戻り値はありません。私はそれをValgrindの下で実行します。アプリケーションは正常に終了します。エラー/警告メッセージは表示されません。
誰でもデバッグ方法を知っていますか?使用するツールは?私は情報が得られないので、これにかなり拘束されています。事前 Harnen
ホープあなたは、シグナリングを使用していますか?あなたは 'gdb'でそれをチェックしましたか? –
Valgrind?これはメモリリークではなく、 'gdb'の下で実行します。 'SIG_PIPE'のために終了しているかもしれません。 –
[SIGPIPEを防止する方法やサーバーの終了を防ぐ方法](http://stackoverflow.com/questions/6821469/how-to-prevent-sigpipe-or-prevent-the-server-from-ending) –