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


    完成端口函数:

    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),那么就判断这个连接已经断开.

  • 相关阅读:
    java 单例模式
    java 设计模式
    android 设计模式
    我的坦克兵爷爷也曾扬威世界
    我的坦克兵爷爷也曾扬威世界
    LD_LIBRARY_PATH设置问题
    LD_LIBRARY_PATH设置问题
    销售员和程序员
    销售员和程序员
    如何成为Python高手
  • 原文地址:https://www.cnblogs.com/zhaoxinshanwei/p/3894089.html
Copyright © 2020-2023  润新知