none
在使用完成端口技术的TCP服务器中如何正确的关闭超时的连接 RRS feed

  • 常规讨论

  • 首先服务器接受了一个连接,然后投递了一个WSARecv,假定过了一分钟该请求还没有从GetQueuedCompletionStatus调用中返回,我就判断该读请求超时了,这时我需要关闭连接。
    但是可能出现这种问题,即在我认定超时之后但真正调用closesocket之前WSARecv刚好成功返回了,然后在投递下一个IO请求之前,调用closesocket关闭了该连接并且该句柄马上被其它新来的客户重用了,则投递的下一个IO请求就会错误的投递到新来的客户上。当然可以通过使用DisconnectEx加TF_REUSE_SOCKET标志来解决,但是就会卡上30秒,不知各位有没有什么好办法

    2009年5月17日 5:12