完成端口(IOCP)怎么判断某个连接是否断开
生活随笔
收集整理的這篇文章主要介紹了
完成端口(IOCP)怎么判断某个连接是否断开
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
完成端口函數:
[csharp] view plaincopy
BOOLGetQueuedCompletionStatus(
HANDLECompletionPort,
LPDWORDlpNumberOfBytes,
PULONG_PTRlpCompletionKey,
LPOVERLAPPED*lpOverlapped,
DWORDdwMilliseconds
);
1.通常做法
目前查了大部分網上的關于完成端口,是否連接斷線,大多是通過*lpNumberOfBytes==0來判斷是否有連接斷線的.之前我也是這么做的.但在實際游戲平臺運行過程中,偶爾有游戲玩家反映,為什么我玩著玩著就斷線了,由于網絡原因復雜,并沒有對此判斷表示過懷疑.
2.發現問題
今天在調試網絡部分代碼,,發現有些時候*lpNumberOfBytes==0,但是再調用nCount = recv函數去收數據,竟然可以收到數據(nCount >0),反復測試了好幾次,多是如此,那表明dwThancferred==0的時候,并不表示連接已經斷開.
3.解決問題
從上述發現的問題可以看到,*lpNumberOfBytes==0時,再用nCount = recv去讀取下數據,如果還是未讀取到數據(nCount==0),那么就判斷這個連接已經斷開.
總結
以上是生活随笔為你收集整理的完成端口(IOCP)怎么判断某个连接是否断开的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 色彩的狂欢:看嘎玛·多吉次仁的画展
- 下一篇: 一部珍贵的130位作家的手稿集