码迷,mamicode.com
首页 > 其他好文 > 详细

完成端口(IOCP)怎么判断某个连接是否断开

时间:2014-08-06 11:46:31      阅读:183      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   io   strong   数据   art   

完成端口函数:

  1. BOOL GetQueuedCompletionStatus(  
  2.   
  3.   HANDLE CompletionPort,  
  4.   
  5.   LPDWORD lpNumberOfBytes,  
  6.   
  7.   PULONG_PTR lpCompletionKey,  
  8.   
  9.   LPOVERLAPPED* lpOverlapped,  
  10.   
  11.   DWORD dwMilliseconds  
  12.   
  13. );  

1.通常做法

目前查了大部分网上的关于完成端口,是否连接断线,大多是通过*lpNumberOfBytes==0来判断是否有连接断线的.之前我也是这么做的.但在实际游戏平台运行过程中,偶尔有游戏玩家反映,为什么我玩着玩着就断线了,由于网络原因复杂,并没有对此判断表示过怀疑.

2.发现问题

今天在调试网络部分代码,,发现有些时候*lpNumberOfBytes==0,但是再调用nCount = recv函数去收数据,竟然可以收到数据(nCount >0),反复测试了好几次,多是如此,那表明dwThancferred==0的时候,并不表示连接已经断开.

3.解决问题

从上述发现的问题可以看到,*lpNumberOfBytes==0时,再用nCount = recv去读取下数据,如果还是未读取到数据(nCount==0),那么就判断这个连接已经断开.

完成端口(IOCP)怎么判断某个连接是否断开,布布扣,bubuko.com

完成端口(IOCP)怎么判断某个连接是否断开

标签:style   blog   http   color   io   strong   数据   art   

原文地址:http://www.cnblogs.com/zhaoxinshanwei/p/3894089.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!