我们编写了一个应用程序,其中客户端-服务器通信与 IOCP 概念一起使用。
客户端通过无线接入点连接到服务器。
当网络中发生临时断开连接时,这可能会导致 CLOSE_WAIT 状态。这可能表明客户端正确关闭了连接。但是服务器仍然打开它的套接字。如果有太多的端口实例(服务器和客户端正在与之交谈)处于 CLOSE_WAIT 状态,那么在最高峰,服务器停止运行从而拒绝连接。这完全令人沮丧。在这种情况下,用户必须重新启动服务器通过清除内存来清除所有close_wait状态。当服务器重新启动时,客户端再次尝试连接服务器。服务器再次调用accept命令,但在接受新连接之前,之前的连接应该在服务器端关闭,如何我们能做到吗?
我们如何在不重新启动服务器的情况下删除套接字的 close_wait 状态?
有没有其他方法可以避免服务器重启?
我们还了解到,如果所有可用的临时端口都分配给客户端应用程序,那么客户端会遇到一种称为 TCP/IP 端口耗尽的情况。当 TCP/IP 端口耗尽时,无法进行客户端端口保留,并且客户端应用程序将在尝试通过 TCP/IP 套接字连接到服务器时发生错误。如果发生这种情况,那么我们需要增加动态分配给客户端 TCP/IP 套接字连接的临时端口的上限。
参考:http: //msdn.microsoft.com/en-us/library/aa560610%28v=bts.10%29.aspx
让我们知道这种替代方式是否有用?
提前致谢。
问候艾米