WSARecv()重叠操作未完成时又调用了WSASend()会怎么样?

xuting 2001-07-31 12:40:38
我的程序中需要在一个socket上一直保持接收数据的状态,但是在没有数据到来
的时候也可能需要发送数据。

  我是在Windows2000下写的,采用了系统线程池和I/O的完成端口模型。在线程池的
一个I/O组件中对socket s调用了WSARecv()等待数据,之后程序进行一些和s无关的I/O
操作,然后又对s调用了WSASend(),因为调用是两次分别在完成端口的
OVERLAPPED_COMPLETION_ROUTINE回调函数中进行的,所以WSARecv和WSASend可能是
在同一线程里发生,也可能是不同的线程。

  程序运行的结果好像是前面的WSARecv调用被取消掉了,也没有任何完成响应,
直接进入了WSASend的完成响应函数里(通过Overlapped结构判断),但是之后线程池
中会发生first-chanced Exception: Access Violation的情况,虽然非法操作不是
在我的代码中,但是我试了半天觉得就是因为我的这种调用造成的。

  到底我的用法错在哪儿,或者针对程序的要求应该怎样进行socket的处理?
...全文
83 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
ExitWindows 2001-08-01
  • 打赏
  • 举报
回复
up
ExitWindows 2001-07-31
  • 打赏
  • 举报
回复
up
ExitWindows 2001-07-31
  • 打赏
  • 举报
回复
up

4,387

社区成员

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

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