投递到完成端口的IO操作用closesocket,GetQueuedCompletionStatus不返回?

lsgt 2009-10-19 04:51:41
投递到完成端口的IO操作用closesocket,GetQueuedCompletionStatus为什么不返回?
...全文
348 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
lsgt 2009-10-20
  • 打赏
  • 举报
回复
今天测试了一下,很奇怪:
我用ConnectEx,如果到一个不存在的地址,第一次GQCS总是在20秒的时候返回,无论中间用不用closesocket,但之后一用closesocket,GQCS就返回了。

之后我测试了一个存在的地址,然后发出一个WSARecv请求(当然服务器不返回任何数据),无论怎样closesocket,GQCS均不返回。

我测试是主线程发出ConnectEx,GQCS线程发出WSARecv请求,然后另有一个检测超时的线程发出closesocket。
Connect成功后使用了SO_UPDATE_CONNECT_CONTEXT的。

另外我试过使用PostQueuedCompletionStatus发送一个特殊请求,以便GQCS返回待关闭的包,这时候GQCS是返回了,但用closesocket关闭socket后,过段时间,GQCS又会返回该socket,晕。
lsgt 2009-10-19
  • 打赏
  • 举报
回复
那我再描述一下:

我向完成端口投递了一个IO操作,例如ConnectEx,同时有一个检测超时的线程,当检查到该操作超时,我需要让GetQueuedCompletionStatus返回,以便清楚分配给该IO操作的资源。

我本来以为用closesocket(s)的话,GetQueuedCompletionStatus就会返回一个包含该socket的CompleteKey,但是GetQueuedCompetionStatus并不返回。这个是怎么回事?

pengxj7945 2009-10-19
  • 打赏
  • 举报
回复
描述太抽象了,没有人能回答上来。

4,356

社区成员

发帖
与我相关
我的任务
社区描述
通信技术相关讨论
社区管理员
  • 网络通信
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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