作者在 2012-01-05 23:19:04 发布以下内容
在连续的几个WSARecv之后关闭客户端,这时IOCP有可能不会返回所有WSARecv发起的重叠操作。这真TMD蛋疼,我在这问题上调试了很长时间,并不是每次都出现。
有一种情况WSARecv发起重叠操作而IOCP不返回,那就是客户端异常(拔网线,烧机器等等)。在正常情况下客户端断开连接IOCP会返回一个0字节接收。但是多个WSARecv发起的重叠操作在极少数情况下还是有几个不会返回0字节接收,这时就卡在那了,我去你个╮(╯_╰)╭。
由此我猜测,这几个卡在那的WSARecv和客户端异常断开情况类似,解决方法就是直接closesocket。
到目前为止使用closesoket似乎解决了卡死的问题。不知道是不是对症下药了。