我正在編寫一個客戶機 - 服務器程序。服務器爲select()
,readfd1
等待readfd1
的準備就緒狀態被讀取。如果準備就緒,服務器正在收集數據並打印。一切都很好,但一段時間後,套接字recv()
失敗,errno
設置爲ETIMEDOUT
。現在我想重寫我的程序來挫敗這些錯誤狀況。所以我經歷了Richard Stevens的「Unix Network Programming」,其中規定了select()
的4個條件來解鎖。以下是引起我注意的兩個條件:套接字錯誤意味着套接字是否關閉
A. client sent FIN, here return value of `recv()` will be `0`
B. some socket error, here return value of `recv()` will be `-1`.
我的問題是,套接字錯誤是否會關閉連接?如果是這樣,那麼爲什麼上述兩個條件是分開的。如果沒有,插座上的下一個recv()
工作?