关于closesocket()后,创建socket会分配到后被关闭

geziliu 2020-10-20 08:58:17

最近弄个项目,服务端采用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这么傻。。。还是我没找到真实问题。。。
...全文
59 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
zgl7903 2020-10-20
  • 打赏
  • 举报
回复
创建套接字的地方也打印调试信息看看 (日志最好加上当前时间,好区分先后顺序和判断时间间隔)

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧