完成端口(IOCP)怎么判断某个连接是否断开
完成端口函数:
- BOOL GetQueuedCompletionStatus(
- HANDLE CompletionPort,
- LPDWORD lpNumberOfBytes,
- PULONG_PTR lpCompletionKey,
- LPOVERLAPPED* lpOverlapped,
- DWORD dwMilliseconds
- );
1.通常做法
目前查了大部分网上的关于完成端口,是否连接断线,大多是通过*lpNumberOfBytes==0来判断是否有连接断线的.之前我也是这么做的.但在实际游戏平台运行过程中,偶尔有游戏玩家反映,为什么我玩着玩着就断线了,由于网络原因复杂,并没有对此判断表示过怀疑.
2.发现问题
今天在调试网络部分代码,,发现有些时候*lpNumberOfBytes==0,但是再调用nCount = recv函数去收数据,竟然可以收到数据(nCount >0),反复测试了好几次,多是如此,那表明dwThancferred==0的时候,并不表示连接已经断开.
3.解决问题
从上述发现的问题可以看到,*lpNumberOfBytes==0时,再用nCount = recv去读取下数据,如果还是未读取到数据(nCount==0),那么就判断这个连接已经断开.
完成端口(IOCP)怎么判断某个连接是否断开的更多相关文章
- C# 客户端判断服务器连接已断开
问题描述: 在C# Socket编程中,服务器端已经断开连接(发送数据方),客户端接收服务器端发送数据,在客户端使用client.Recieve()中,服务器端断开连接,客户端任然显示已 ...
- socket通信时如何判断当前连接是否断开--select函数,心跳线程,QsocketNotifier监控socket
client与server建立socket连接之后,如果突然关闭server,此时,如果不在客户端close(socket_fd),会有不好的影响: QsocketNotifier监控socket的槽 ...
- DELPHI中完成端口(IOCP)的简单分析(2)
DELPHI中完成端口(IOCP)的简单分析(2) 今天我写一下关于DELPHI编写完成端口(IOCP)的工作者线程中的东西.希望各位能提出批评意见.上次我写了关于常见IOCP的代码,对于IOCP ...
- DELPHI中完成端口(IOCP)的简单分析(1)
DELPHI中完成端口(IOCP)的简单分析(1) 用DELPHI开发网络代码已经有一段时间了! 我发现在网上用VC来实现完成端口(IOCP)的代码很多,但是使用DELPHI来实现的就比较少了.对 ...
- 如何判断Socket连接失效
http://cuisuqiang.iteye.com/blog/1453632 ——————————————————————————————————————————————————————————— ...
- DELPHI中完成端口(IOCP)的简单分析(4)
DELPHI中完成端口(IOCP)的简单分析(4) 在我以前写的文章中,一直说的是如何接收数据.但是对于如何发送数据却一点也没有提到.因为从代码量上来说接收的代码要比发送多很多.今天我就来写一下如 ...
- java socket 判断Socket连接失效
要判断socket连接链路是否可用时,不能通过socket.isClosed() 和 socket.isConnected() 方法判断,要通过心跳包 socket.sendUrgentData(0x ...
- c#通过socket判断服务器连接是否正常
判断Socket是否连接上,需要通过发包来确认. 之前确认都是调用调用socket的connected属性,然而该属性是上次的连接是否成功的结果,不及时. // 检查一个Socket是否可连接 pri ...
- 【VS开发】如何判断客户端SOCKET已经断开连接?
http://biancheng.dnbcw.info/linux/366100.html 最近在做一个服务器端程序,C/S结构.功能方面比较简单就是client端与server端建立连接,然后 ...
随机推荐
- BZOJ 4551 树
线段树+标记永久化. #include<iostream> #include<cstdio> #include<cstring> #include<algor ...
- 【英语】Bingo口语笔记(70) - 最易忽略的2个连读技巧
- 【Python】logging模块学习笔记
因为做接口自动化测试遇到的一个代码逻辑上的问题,又不知道具体问题出在哪里,所以在模块化代码之前,先学习下python的日志模块logging. 入门1 入门2 日志级别大小关系为:CRITICAL & ...
- vim 大小写转化命令
vim中大小写转化的命令是<blockquote>gu或者gU</blockquote>形象一点的解释就是小u意味着转为小写:大U意味着转为大写. 剩下的就是对这两个命令的限定 ...
- typedef 深入剖析
typedef是一个我们常常会用到的关键字,而这个关键字有许多陷阱或者说许多不为我们深入理解的地方.很多书上都是很简单地一笔代过,并没有真正地让我们理解这个关键字.本文对其进行详细地说明.综合网络上找 ...
- Android源码分析--CircleImageView 源码详解
源码地址为 https://github.com/hdodenhof/CircleImageView 实际上就是一个圆形的imageview 的自定义控件.代码写的很优雅,实现效果也很好, 特此分析. ...
- UIScrollView 不能滚动的问题
uiscrollview是开发sdk自带的控件, 在使用的时候,发现滚动不了, 最常山见的原因是 contentSize 这个属性,比uiscrollview的frame要小...所以无需滚动,自然就 ...
- 所有 HTTP 状态代码及其定义
所有 HTTP 状态代码及其定义. 代码 指示 2xx 成功 200 正常:请求已完成. 201 正常:紧接 POST 命令. 202 正常:已接受用于处理,但处理尚未完成. 20 ...
- 嵌入式 hi3518平台uboot引导nfs文件系统
首先贴出来我的bootargs的设置(注没有换行符!!!): setenv bootargs noinitrd mem=64M root=/dev/nfs init=/linuxrc rw nfsro ...
- POJ 1844 Sum
题意:给一个整数n,求当n由1到k的连续整数加或减组成时的最小的k. 解法:一开始觉得dp……后来觉得复杂度太大了……GG……百度了一下是个数学题orz. 如果n全部由加法组成,那么k可以组成k(k+ ...