如何安全删除IOCP里的overlap对象

samuelo 2009-10-23 02:05:47
并发连接数500左右,投递大量WSARecv到IOCP。
每个连接在closesocket后,延迟5分钟delete 对应的overlap指针。
程序跑几十分钟后会挂掉,内存错误。
如果不删除overlap指针,可以跑一夜,直到内存用光或socket资源耗尽。

怀疑是close socket后,对应的overlap仍在IOCP里。释放overlap的内存,引起IOCP出错,程序崩溃。
请问是不是这样?
不知道有什么办法可以让IOCP弹出overlap,不再使用它。
谢谢。
...全文
84 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
ahao 2009-10-23
  • 打赏
  • 举报
回复
closesocket后,完成例程不会马上调的,是异步的
tech_study_00 2009-10-23
  • 打赏
  • 举报
回复
必须在连接关闭的时候删除IOCP里面的OVERLAP对象。

否则连接并发量一大,时间一长,肯定挂掉。

申请对象用GlobalHeapAlloc()

关闭不是用delete,
用GlobalHeapFree()
samuelo 2009-10-23
  • 打赏
  • 举报
回复
closesocket后,IOCP应该会完成吧?
延迟5分钟应该等到了这个完成,使得delete发生在完成之后。
或者其实没有完成?
需要投递什么消息通知IOCP完成吗?
ahao 2009-10-23
  • 打赏
  • 举报
回复
似乎是没办法,必须等待完成后才能删除

18,356

社区成员

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

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