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

完成端口函数:

[csharp] view plaincopy

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

1.通常做法

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

2.发现问题

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

3.解决问题

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

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

时间: 2024-08-08 23:12:51

完成端口(IOCP)怎么判断某个连接是否断开的相关文章

关于完成端口IOCP异步接收连接函数AcceptEx注意事项

AcceptEx方法有一个参数dwReceiveDataLength,指明了在收到连接后是否需要收到第一包数据才返回.需要注意的是,如果 dwReceiveDataLength=0,则当接收到一个连接后立即返回,如果dwReceiveDataLength不等于0,则在接收到连接后,必须 等到客户端发来第一包数据才返回.可根据实际需要设定此参数.这就是有人说明明我已经建立连接,为何服务端收不到ACCEPT事件的原因. 特别要注意,当dwReceiveDataLength设置为0后,在使用m_lpf

【windows核心编程】IO完成端口(IOCP)复制文件小例

1.演示内容 文件复制 2.提要 复制大文件时,使用FILE_FLAG_NO_BUFFERING标志 同时需要注意: 读写文件的偏移地址为 磁盘扇区 的整数倍 读写文件的字节数为 磁盘扇区 的整数倍 读文件到的缓冲区在进程地址空间中的地址为 磁盘扇区 的整数倍 3.JUST CODING #include "stdafx.h" #include <Windows.h> #include <process.h> #include <iostream>

Sql Server 2005的1433端口打开和进行远程连接

参考地址:http://topic.csdn.net/u/20090828/16/e693935a-99b7-4090-a6bc-0123c91183eb.html 1.如何打开sql server 2005 的1433端口配置工具->Sql Server Configuration Manager->MSSQLSERVER的协议看看TCP/IP协议是否启动,如果启动,右键菜单点"属性" ,在分页菜单中选"IP地址",把"IP1"和&

android中判断网络连接是否可用

一.判断网络连接是否可用 1 public static boolean isNetworkAvailable(Context context) { 2 ConnectivityManager cm = (ConnectivityManager) context 3 .getSystemService(Context.CONNECTIVITY_SERVICE); 4 if (cm == null) { 5 } else { 6 //如果仅仅是用来判断网络连接 7 //则可以使用 cm.getAc

Android中判断网络连接是否可用及监控网络状态

Android中判断网络连接是否可用及监控网络状态 作者: 字体:[增加 减小] 类型:转载 获取网络信息需要在AndroidManifest.xml文件中加入相应的权限,接下来详细介绍Android中判断网络连接是否可用及监控网络状态,感兴趣的朋友可以参考下 获取网络信息需要在AndroidManifest.xml文件中加入相应的权限. <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"

socket.sendUrgentData判断网络远端是否断开连接

来自于 http://chenke1215.blog.163.com/blog/static/124414520103611222617/ 最近在开发中遇到一个问题,就是如何判断远端服务器是否已经断开连接,如果断开那么需要重新连接. 首先想到socket类的方法isClosed().isConnected().isInputStreamShutdown().isOutputStreamShutdown()等,但经过试验并查看相关文档,这些方法都是本地端的状态,无法判断远端是否已经断开连接. 然后

android判断网络连接状态、联网类型、运营商

/** * 获取上网方式 * * @param mContext * @return */ public static String getNetType(Context mContext) { String netType = ""; ConnectivityManager connectionManager = (ConnectivityManager) mContext .getSystemService(Context.CONNECTIVITY_SERVICE); Networ

Windows远程桌面:端口号更改&指定IP连接

由于工作需要,经常要使用远程桌面连接到Windows服务器.Windows的默认远程桌面端口号为3389,为增加服务器安全性,除了在硬件设备做规则外,还可以用Windows自带的策略来增加Windows服务器的安全下. 下面以Windows2008R2为例,分别设置二种策略:(两种任选一种,不能同时生效) 远程桌面端口号更改 高级防火墙指定IP连接 第一种方式:远程桌面端口号更改 注册表要更改二处,第一处路径如下 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlS

清除图片缓存以及判断网络连接

final File directory = new File( "/sdcard/Android/data/com.baway.test/cache/xBitmapCache"); clear.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (directory != null && directory.exists() && d