socket在連線以後,如果客戶端非正常退出,比如網線掉了、超時退出等,伺服器端的socket仍然有快取,此時可以從該socket描述符中讀出一些資料,短時間內甚至可以寫,因此判斷tcp socket是否斷開及其不易,網上有很多方法,都不能精確判斷。本人用select和recv寫了乙個,在緩衝區被讀完以後判斷非常管用。這裡,recv時使用msg_peek引數,資料不會從緩衝區中清除掉,因此不會影響正常的讀寫。
/* check whether socket is connected. actually, it is not accurate if the client
* crashs and the server don't know about it because the socket buffer is ready.
* so the return value '0' doesn't mean the socket is really valid. of course,
* '-1' shows the socket is invalid
*/int checksock(int s)
if (!fd_isset(s,&fds))
/* read one byte from socket */
nbread = recv(s, buf, 1, msg_peek);
if (nbread <= 0)
return -1;
return 0;
}**:
謝謝分享!
如何判斷socket已經斷開
最近在做乙個伺服器端程式,c s結構。功能方面比較簡單就是client端與server端建立連線,然後傳送訊息給server。我在server端 會使用專門的執行緒處理一條socket連線。這就涉及到乙個問題,如果socket連線斷開 異常,正常 後,我如何才能感知到?server端這邊是絕 對被動...
檢測socket鏈結是否斷開
解決方案 1.傳送重試,由業務完成。因為club l5的send介面不會保留使用者傳送的內容,在recv失敗的情況下,使用者傳送的資料已經丟失,所以只能由業務進行重試。結論 否定。由於後端伺服器有多台,每次傳送的時候並不能不能保證連線的機器還是上次傳送的那一台伺服器,有可能後端所有的連線都被斷開,雖...
C 中判斷socket是否已斷開的方法
c 中判斷socket是否已斷開的方法 2011年09月07日 socket類的connected屬性只表示最後一次i o操作的狀態,如果這之後 連線的另一方 斷開了,它還一直返回true,除非你再通過socket來傳送資料。所以通過個屬性來判斷是行不通的!事實上,socket.receive 方法...