我嘗試在c中開發一個聊天應用程序。我使用插座和select()
。 但是,如果我在客戶端之前關閉服務器,客戶端有一條消息「Broken Pipe」。 我用select(),但我不知道如何避免它?如何避免破損的管道?
3
A
回答
0
註冊PIPE信號的處理程序(也可能忽略信號)。
+0
還有另外一種方法嗎?我不想捕捉信號管 – heruma 2013-04-25 16:23:56
+0
@heruma:您可以使用'SIG_IGN'忽略'SIGPIPE'。只需閱讀手冊頁或其他內容。某些API還支持額外的管道選項,以禁用從內核傳遞「SIGPIPE」。請參閱http://stackoverflow.com/questions/108183/how-to-prevent-sigpipes-or-handle-them-properly – 2013-04-25 16:50:33
4
您可以禁用信號:雖然選擇的答案是忽略信號處理寬,有其他選擇
signal(SIGPIPE, SIG_IGN);
:
使用與MSG_NOSIGNAL發送功能:
send(con, buff_enviar+enviado, length-enviado, MSG_NOSIGNAL);
在套接字級禁用SIGPIPE(不適用於所有內核):
int flag = 1;
setsockopt(con, SOL_SOCKET, SO_NOSIGPIPE, &flag, sizeof(flag));
禁用SIGPIPE支持來電線程(您可以在以後恢復):
sigset_t set;
sigemptyset (&set);
sigaddset (&set, SIGPIPE);
pthread_sigmask(SIG_BLOCK, &set, NULL);
的
相關問題
- 1. 避免「管道破損」信息
- 2. PipedInputStream - 如何避免「java.io.IOException:管道損壞」
- 3. 管道破損?
- 4. Python - 如何捕捉破損的管道
- 5. 如何避免管道功能?
- 6. Java中的httpServer中的管道破損
- 7. Android - JavaPhoenixChannel - EPIPE(破損的管道)
- 8. Win32中的破損管道(WinAPI)
- 9. 如何檢測輸入上的破損管道?
- 10. 如何避免libgdx SpriteBatch/BitmapFont破壞Texture.bind?
- 11. 如何避免破壞犯CruiseControl.Net
- 12. 避免與subprocess.Popen和多個不同請求破損
- 13. Perl雙向管道IPC,如何避免輸出緩衝
- 14. 如何避免Jenkins多分支管道作業觸發本身
- 15. 如何避免在Rx管道中重新執行操作
- 16. 如何使用Powershell管道避免大型對象?
- 17. 在OSX上關閉破損的SSH管道的優雅方式?
- 18. SSL:破損的管道使用PHP的SoapClient訪問SOAP服務
- 19. onBackPressed - 避免破壞活動
- 20. 避免破壞活動
- 21. 錯誤:[Errno 32] python代碼中的管道破損
- 22. 使用DataInputStream和DataOutputStream和套接字的管道破損
- 23. java.net.SocketException:發送失敗:EPIPE(破損的管道)
- 24. 通過破損的管道發送數據
- 25. Node.js寫入失敗:標準輸出後的管道破損
- 26. 運行簡單rhadoop作業的問題 - 破損管道錯誤
- 27. 與套接字連接的破損管道
- 28. 不知道如何避免此類ClassCastException
- 29. Django + WebKit =損壞的管道
- 30. Java SocketException損壞的管道
可能重複[如何防止SIGPIPEs(或妥善處理)](http://stackoverflow.com/questions/108183 /如何防止 - sigpipes - 或 - 處理它們 - 正確) – 2013-04-25 16:51:33
不要只關閉管道,很好地說再見。所以另一端也知道要關閉它。 – 2013-04-25 17:00:34