0
我需要在服務器和客戶端的AF_INET套接字中處理哪種信號?C unix套接字。信號處理
我需要在服務器和客戶端的AF_INET套接字中處理哪種信號?C unix套接字。信號處理
取決於你如何做你正在做什麼,你可以有處理SIG_PIPE
,當連接任意打破它可以發生。
你不應該處理任何其他信號。
如果您正在使用select()
或poll()
或(個人喜好)epoll()
你應該檢查錯誤(例如,POLLHUP
)您檢查讀/寫可用性之前。
您還應該經常檢查返回值read()/write()/send()/recv()
。如果有錯誤,則返回-1,但如果它們返回0,則意味着另一端斷開連接。也就是說,讀取0只意味着讀取了0個字節,但連接仍然良好。事實並非如此。關閉插座。這由POSIX規定。
我問過這個問題,因爲在我的代碼的第一個版本中,當服務器發生分段錯誤時,客戶端進入無窮大循環...... 所以在這種情況下,客戶端也收到一個SIG_PIPE? – giozh
@SvenMarnach我已經在雙方使用超時(只使用alarm()函數),但我想知道是否有其他類型的信號來處理:) – giozh
@SvenMarnach:如果你不得不求助於超時或線程你做錯了什麼。 – delicateLatticeworkFever