关于重叠I/O中那个WSAOVERLAPPED的困惑!!

Damn_boy 2011-02-26 11:26:06
是不是针对每个I/O请求都要开一个独立的WSAOVERLAPPED结构啊?

比如我在一个名为 listen 的 socket 上同时投递四个WSASend请求
那是不是要开4个WSAOVERLAPPED结构 然后分别绑定4个WSAEVENT 然后在分别传递给那4个WSASend

再然后调用WSAWaitForMultipleEvents()等待时间到来?


大概意思就是说 把 WSAEVENT 和 WSAOVERLAPPED 看成一个整体,二者关系是1:1 然后可以以1:N的关系和SOCKET建立关系?

求真相。。
...全文
319 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
[Quote=引用楼主 damn_boy 的回复:]
是不是针对每个I/O请求都要开一个独立的WSAOVERLAPPED结构啊?

比如我在一个名为 listen 的 socket 上同时投递四个WSASend请求
那是不是要开4个WSAOVERLAPPED结构 然后分别绑定4个WSAEVENT 然后在分别传递给那4个WSASend

再然后调用WSAWaitForMultipleEvents()等待时间到来?


大概意思就是说 把……
[/Quote]

当然是在第一个wsasend的回调函数返回后或者是第一个wsasend的事件触发后再调用下一个wsasend了
你连续调用wsasend有什么意义呢
还不如把这4个send的缓冲区合并填到一个wsasend里面
看wsasend的第三个参数,就是缓冲区数量
开4个WSAOVERLAPPED结构 然后分别绑定4个WSAEVENT 然后在分别传递给那4个WSASend是一种非常失败的做法
白虹李李 2011-03-02
  • 打赏
  • 举报
回复
那是不是要开4个WSAOVERLAPPED结构 然后分别绑定4个WSAEVENT 然后在分别传递给那4个WSASend

根据我的猜测,不用开4个WSAOVERLAPPED,只是需要4个WSAEVENT而已(如果你需要同时投递4个I/O请求的话)。你可以编程试试。
MervynChina 2011-02-28
  • 打赏
  • 举报
回复
和socket建立连接不是1:N的 也是1:1的,服务器在不停地连接创建
zyyoung 2011-02-28
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 cd2108006026 的回复:]
是不是针对每个I/O请求都要开一个独立的WSAOVERLAPPED结构啊?

是的。。
[/Quote]
就是因为频繁申请内存,所以建议引入内存池,解决内存碎片导致性能下降。
cd2108006026 2011-02-26
  • 打赏
  • 举报
回复
是不是针对每个I/O请求都要开一个独立的WSAOVERLAPPED结构啊?

是的。。

18,356

社区成员

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

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