- ベストアンサー
パイプが切断されました
Linux上のサーバプログラムとWindows上のクライアントプログラムをLAN上で通信させているのですが、 クライアントから切断すると必ずサーバ側で「パイプが切断されました」と表示され強制終了してしまいます。 原因や解析方法をご教授ください。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
そのサーバーソフトは自作ですか? サーバーからクライアントに向けて、そのパイプ(ソケット)を通してデータを送っていますか。閉じたパイプに書き込むと、シグナル SIG_PIPE が発生し、プロセスが終了してしまいます。SIG_PIPE を無視するかキャプチャするようにプログラムしてください。(「パイプが切断されました」と表示されるのだから SIG_PIPE はキャプチャしているようにも思えますが…) シグナルを無視/キャプチャするには signal(2) などのシステムコールを使ってください。
お礼
その後自分でも調べ、signal(SIGPIPE, SIG_IGN); をcallすることにより事象は発生しなくなりました。 ご指摘のとおり自作サーバーソフトからソケットで sendto/recvfromしていますのでビンゴです! ありがとうございました。