一个关于基于IOCP架构的通信程序,运行一段时间后无法,客户端再也连接不上有关问题,请各位大神帮忙分析一下,万分感谢
一个关于基于IOCP架构的通信程序,运行一段时间后无法,客户端再也连接不上问题,请各位大神帮忙分析一下,万分感谢
我做了一个数据采集软件,通信服务网络架构采用的是小猪发布在网上的一个关于IOCP的例子( http://piggyxp.download.****.net/ 基本上没有改动)。目前情况是有300多个客户端连接服务程序,刚开始连接的时候基本上300多个都能连接上,能正常的收发数据。但是运行五六个小时后出现了问题,那些离线的客户端再也无法连接上程序了。已经连上没有掉线的客户端能正常收发数据,但是一掉线就再
也连不上了。我用模拟软件ComPortDebug尝试连接也连接不上,显示拒绝连接(错误代码是10060)。但是通信程序重启之后客户端又能正常连接了。我研究了一下初步猜想可能是 投递AcceptEX请求出了问题,导致没有socket用于等待连接。但是又不确定是不是这个原因,希望各位大神能帮我分析一下。ps: 这个程序是有心跳机制的,大概几分钟没有收到客户端的心跳包,就会判定离线,释放资源。
------解决思路----------------------
还有可能是listen的socket已经不在监听了,
------解决思路----------------------
你采用了心跳机制。。。重连是在几分钟之内还是过掉了几分钟还是连不上? 如果是几分钟之内,客户端关闭连接close_wait状态。。。但服务端忙与读或者写,没有关闭连接。代码需要判断socket,一旦读到0,断开连接,read返回负,检查一下errno,如果不是AGAIN,就断开连接。
我做了一个数据采集软件,通信服务网络架构采用的是小猪发布在网上的一个关于IOCP的例子( http://piggyxp.download.****.net/ 基本上没有改动)。目前情况是有300多个客户端连接服务程序,刚开始连接的时候基本上300多个都能连接上,能正常的收发数据。但是运行五六个小时后出现了问题,那些离线的客户端再也无法连接上程序了。已经连上没有掉线的客户端能正常收发数据,但是一掉线就再
也连不上了。我用模拟软件ComPortDebug尝试连接也连接不上,显示拒绝连接(错误代码是10060)。但是通信程序重启之后客户端又能正常连接了。我研究了一下初步猜想可能是 投递AcceptEX请求出了问题,导致没有socket用于等待连接。但是又不确定是不是这个原因,希望各位大神能帮我分析一下。ps: 这个程序是有心跳机制的,大概几分钟没有收到客户端的心跳包,就会判定离线,释放资源。
------解决思路----------------------
还有可能是listen的socket已经不在监听了,
------解决思路----------------------
你采用了心跳机制。。。重连是在几分钟之内还是过掉了几分钟还是连不上? 如果是几分钟之内,客户端关闭连接close_wait状态。。。但服务端忙与读或者写,没有关闭连接。代码需要判断socket,一旦读到0,断开连接,read返回负,检查一下errno,如果不是AGAIN,就断开连接。