我采用IOCP模型在多连接大数据量测试的时候,如果多个客户端有异常中断的时候,服务器会出现大量的WSASend操作无法完成的情况,
也就是:WSASend后出现WSA_IO_PENDING返回,通过GetQueuedCompletionStatus等待WSASend的完成信号却一直无法等到,请问这种情况如何处理?
时不时要对WSASend操作设一个时间限制?如何设置?
请高手指点,谢谢。

解决方案 »

  1.   

    如果多个客户端有异常中断GetQueuedCompletionStatus会告诉你出错了,TCP协议本身就实现了
      

  2.   

    我记得在一篇文章里看到:不能依靠程序本身的socket判断网络是否中断,所以在网络游戏等大型软件中都是使用“心跳包”来判断连接状态的,好像是这个意思。在我的这个程序里,GetQueuedCompletionStatus并没有返回连接异常,当然我也是用了心跳包的,但是超时时间设置的比较长,5分钟,但是就是在5分钟内这些未完成的WSASend就能达到几万个,导致内存耗尽,所以我想给WSASend操作设置一个完成时间,到时不完成就丢弃,但是我不知到如何设置。如果有哪位高手碰到过这样的问题,请指点以下。谢谢。
      

  3.   

    我现在只要想知道的是:WSASend操作能不能设置一个完成时间?依靠系统的soket自身判断连接情况是不可靠的,这种情况很常见。
      

  4.   

    如何它能返回错误的话就没有这些问题了。我现在采用的方式是判断连接上未完成的WSASend操作的个数,如果未完成的WSASend操作达到一定的数据就不再继续进行WSASend操作了。也不知管不管用。
      

  5.   

    这位兄弟也碰到了这个问题,不过好像没有完全解决http://bbs.zxbc.cn/archiver/tid-33888.html