我寫了一個socket的客戶端和服務器端,請問服務器端如何判斷客戶端已經斷開連接了
如果客戶端結束進程,會發出FIN,但是如果是網線撥了,服務器就不知道了。借樓主的貼討論一下:
1.如果撥掉網線的時候服務哭正在阻塞讀,且沒有設置超時選項,它會阻塞多久才能知道不可達?
2.如果。。。。。。。。。。正在阻塞寫,。。。。。。。。。。。。。。。。。。。。。。。?
(也沒有設置KEEP_ALIVE)
1.如果撥掉網線的時候服務哭正在阻塞讀,且沒有設置超時選項,它會阻塞多久才能知道不可達?
2.如果。。。。。。。。。。正在阻塞寫,。。。。。。。。。。。。。。。。。。。。。。。?
(也沒有設置KEEP_ALIVE)
我用心跳機制來防止拔網線這中情況
client每間隔M秒發一個心跳包給server
若連續N秒server端沒有收到client的心跳包,則認為client已經去見馬克思了
一般應該這樣:client每間隔M秒發一個心跳包給server
若連續N秒server端沒有收到client的心跳包,則認為client已經去見馬克思了
1、心跳。
2、非阻塞方式。阻塞方式是不方便判斷諸如:網線斷開這樣的異常情況的。說“不方便”,就因為還是依賴于程序的實現是怎么樣的。
2、非阻塞方式。阻塞方式是不方便判斷諸如:網線斷開這樣的異常情況的。說“不方便”,就因為還是依賴于程序的實現是怎么樣的。
QUOTE:
服務器的收線程的 recv函數會返回0



