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的处理?
...全文
57 3 打赏 收藏 举报
写回复
3 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
ExitWindows 2001-08-01
up
  • 打赏
  • 举报
回复
ExitWindows 2001-07-31
up
  • 打赏
  • 举报
回复
ExitWindows 2001-07-31
up
  • 打赏
  • 举报
回复
相关推荐
发帖
通信技术
加入

4253

社区成员

通信技术相关讨论
社区管理员
  • 网络通信
申请成为版主
帖子事件
创建了帖子
2001-07-31 12:40
社区公告
暂无公告