最近弄个项目,服务端采用IOCP,客户端多线程和服务器通信, 并同时大概10个线程几呼同时去连和断开
因为客户端不仅和自己的IOCP通信了,还和几个外部服务器通信,并随时可能关闭。
可是client总是莫名的在recv后被关闭。 ERR是10053,说是软件中止错误
所以我在所有自己client的closesocket()处加打印调试信息发现,的确是自己关闭的造成的,但问题是:
比如,客户端某处调用closesocket关闭8803的套接字,大概过20ms后, 我的另一线程创建套接字刚好分配到8803,并且创建完能正常send, IOCP那边也能收到我send内容没错,send完后调用阻塞recv, 但大概2~3秒左右时间, recv返回-1 getlasterror = 10053, 这个8803就被关闭了。
我知道closesocket有延迟。。。但是总不可能在内核没关闭某套接的时候,另外创建会分配给同一个套接字吧? 就算分配到同一套接字,又不会过2,3秒被关闭吧。。? windows这么傻。。。还是我没找到真实问题。。。