IOCP小问题求解

ahniyilin 2009-09-25 10:54:54
刚用IOCP两天
看到一些IOCP例子
其中使用到单IO数据结构体
typedef struct _PER_IO_DATA //单IO数据
{
OVERLAPPED ol; //重叠结构
CHAR buf[BUFFER_SIZE]; //数据缓冲区
INT OperatorType; //操作类型
}PER_IO_DATA,*PPER_IO_DATA;

这里面 OperatorType会分:accept,recv,send,end

在IOCP工作线程里会依据OperatorType的不同去分别处理
recv,send,end这三个操作类型我都明白
但是accept会在什么时候使用?

第二个问题:


...全文
81 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
fangle6688 2009-09-25
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 ahniyilin 的回复:]
引用 2 楼 vieri_ch 的回复:
非堵塞accept才有必要考虑这个问题。
不过也不是用IOCP来实现accept的异步处理。
所以一般不会考虑,这只会让上层模型趋于复杂


再问一问题!

在网上看了很多例子

主线程里有WSARecv
工作线程里也有WSARecv

我都放在工作线程里,这样可以吗?
[/Quote]


你的两个问题其实是一个问题。。。
关键要看你的ListenSocket是否关联完成端口:

通常用来监听的socket不用关联完成端口,这样accept会在主线程中完成,你需要将accept得到的客户端socket关联完成端口,并且投递一个WSARecv来启动这个客户端socket的工作流程,否则工作线程中永远不会从GetQueedCompleteStatus获得该socket

如果你的监听socket关联了完成端口,你可以通过投递AcceptEx的方式,让工作线程去处理客户端连入,这样你就可以只在工作线程中投递WSARecv
jcwinner 2009-09-25
  • 打赏
  • 举报
回复
同样学习IOCP中,学习一下。有问题一起讨论。
野男孩 2009-09-25
  • 打赏
  • 举报
回复
都放在工作线程没问题,线程本就不分主次,只是通常把第一个线程叫做主线程而已。
ahniyilin 2009-09-25
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 vieri_ch 的回复:]
非堵塞accept才有必要考虑这个问题。
不过也不是用IOCP来实现accept的异步处理。
所以一般不会考虑,这只会让上层模型趋于复杂
[/Quote]

再问一问题!

在网上看了很多例子

主线程里有WSARecv
工作线程里也有WSARecv

我都放在工作线程里,这样可以吗?
尘雨 2009-09-25
  • 打赏
  • 举报
回复
非堵塞accept才有必要考虑这个问题。
不过也不是用IOCP来实现accept的异步处理。
所以一般不会考虑,这只会让上层模型趋于复杂
glacier3d 2009-09-25
  • 打赏
  • 举报
回复
accept在listen后使用,accept到的socket用CreateIoCompletionPort()与完成端口关联
stjay 2009-09-25
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 ahniyilin 的回复:]
引用 4 楼 coding_hello 的回复:
都放在工作线程没问题,线程本就不分主次,只是通常把第一个线程叫做主线程而已。

谢谢!
再问一个问题:
放在一起的时候,怎么去判断是该做 recv 还是send呢?
就是如何在什么时候去设置
IO数据结构体中的
INT OperatorType;      //操作类型


[/Quote]

在每次调用WSASend,WSARecv,AcceptEx等投递IO前,填写OperatorType
ahniyilin 2009-09-25
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 coding_hello 的回复:]
都放在工作线程没问题,线程本就不分主次,只是通常把第一个线程叫做主线程而已。
[/Quote]
谢谢!
再问一个问题:
放在一起的时候,怎么去判断是该做 recv 还是send呢?
就是如何在什么时候去设置
IO数据结构体中的
INT OperatorType; //操作类型

18,356

社区成员

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

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