Posted on 2008-12-11 19:58
Prayer 閱讀(2445)
評論(0) 編輯 收藏 引用 所屬分類:
SOCKET
我寫了一個socket的客戶端和服務器端,請問服務器端如何判斷客戶端已經斷開連接了
如果客戶端結束進程,會發出FIN,但是如果是網線撥了,服務器就不知道了。借樓主的貼討論一下:
1.如果撥掉網線的時候服務哭正在阻塞讀,且沒有設置超時選項,它會阻塞多久才能知道不可達?
2.如果。。。。。。。。。。正在阻塞寫,。。。。。。。。。。。。。。。。。。。。。。。?
(也沒有設置KEEP_ALIVE)
我用心跳機制來防止拔網線這中情況
client每間隔M秒發一個心跳包給server
若連續N秒server端沒有收到client的心跳包,則認為client已經去見馬克思了
一般應該這樣:
1、心跳。
2、非阻塞方式。阻塞方式是不方便判斷諸如:網線斷開這樣的異常情況的。說“不方便”,就因為還是依賴于程序的實現是怎么樣的。
原帖由
linuxxinetd 于 2007-8-21 20:22 發表

進程是這樣可以的。但我用的是線程,客戶端和服務器端都有兩個收發線程,客戶端發送線程退出,服務器的收線程怎么知道啊?
服務器的收線程的 recv函數會返回0