IOCP ACCEPTEX,closesocket()程序崩溃

woaihuxu9815 2017-10-18 04:56:45
用IOCP和ACCEPTEX,构建CP和线程池后,客户端向服务端发送数据,服务端向每一个连接的客户端发送数据没问题,但在客户端用closesocket()关闭与服务端的连接后,服务端用getqueuedcompletionstatus检查,根据取得数据为0,在服务端就用closesocket()断开与客户端的连接,这时出问题了。好像getqueuedcompletionstatus取得了多次的0,基本在3-8次。哪位大神给分析分析O(∩_∩)O哈!
...全文
327 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
大尾巴猫 2017-10-20
  • 打赏
  • 举报
回复
还是同步的问题,考虑的地方挺多。 就像2楼说的,关闭socket不能重复关闭 可以在关闭前检查socket是否是INVALID_SOCKET,关闭了socket就要设置socket为INCALID_SOCKET 在closesocket前要考虑其他情况,比如有未完成的io请求(closesocket会取消未完成的请求),还有其他线程正在处理同一个socket的请求,这时候关闭就崩溃(不是关闭socket引起崩溃,而是类似delete重叠结构的动作引起的),必须用同步等socket处理完成才能关闭。
woaihuxu9815 2017-10-20
  • 打赏
  • 举报
回复
已解决了,谢谢各位! 我在接到CP的IO事件后,向各客户端发送信息,采用了WSASend(),现在改成Send(),就没有问题了。
xian_wwq 2017-10-19
  • 打赏
  • 举报
回复
如果某个socket出现异常,那么这个socket上相关的投递都会返回 这个时候就需要注意, 已经关闭的socket,就不能再次调用closesocket
smwhotjay 2017-10-18
  • 打赏
  • 举报
回复
多线程工程,设置了/MT /MD了吗? 别是/ML 了

18,356

社区成员

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

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