最近在寫完成埠的網路模型,遇到個問題,就是判斷客戶端斷開的問題,比如 客戶端那邊呼叫了closesocket,服務端GetQueuedCompletionStatus會收到一個recv的事件 并且該函式回傳值是TRUE,這個函式的第二個引數lpNumberOfBytesTransferred會是0 我就通過判斷這個是0來確認客戶端已經斷開連接,如果是服務器端自己closesocket了和客戶端連接的套接字 也會收到一個recv事件 ,lpNumberOfBytesTransferred確實也會是0,和客戶端斷開唯一不一樣的是GetQueuedCompletionStatus的回傳值是FALSE,這里我也可以很好的判斷出來和客戶端斷開連接。但是如果 客戶端連接上來的同時立即send一個資料上來,這個時候服務器主動closesocket過后,GetQueuedCompletionStatus同樣會收到recv事件,并且lpNumberOfBytesTransferred是客戶端send的資料長度,也可以收到客戶端的所有資料,然后就沒然后了 。就不知道這個連接是否斷開了。怎么搞呢?
uj5u.com熱心網友回復:
服務器主動關閉的, 服務器自己做標記啥的管理唄uj5u.com熱心網友回復:
lpNumberOfBytesTransferred是客戶端send的資料長度,也可以收到客戶端的所有資料.再投遞一次異步recv會如何?
檢測斷開最保隙訓是超時判斷。
uj5u.com熱心網友回復:
對于客戶端的處理還得有超時判定來兜底,一旦超時,server主動斷開,釋放資源;
否則例外情況下,sever的資源會被耗光的
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/30265.html
標籤:網絡編程
