linux 下socket通信,client斷開service退出解決辦法


最近在寫linux下的socket通信,正常通信是沒有問題,客戶端沒有連接服務器的時候,程序正常運行,當客戶端連接服務器,並且在線的時候,程序也能正常運行,但是當客戶端斷開連接,服務器就自動斷開,導致程序退出。

找了好久原因,包括keepalive檢測client是否斷開,都不行。

 

后面經過分析,socket通信斷開后,會導致管道破裂,所以程序被迫終止。

解決辦法:

 

signal(SIGPIPE, SIG_IGN);//手動捕獲管道破裂信號,並忽略

這樣每次客戶端斷開,都會提示讀寫錯誤 :broken pipe
但是程序不會退出,因為已經捕獲了異常管道破裂,這個和java里面的異常捕獲類似 。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM