找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 3898|回复: 1

Reactor模式中ReadHandler不能同时READ_MASK和WRITE_MASK

[复制链接]
发表于 2010-8-19 15:11:38 | 显示全部楼层 |阅读模式
本帖最后由 cpponly2008 于 2010-8-19 15:12 编辑

1、同时注册读和写
if (mReactor->register_handler(reader,
                ACE_Event_Handler::READ_MASK | ACE_Event_Handler::WRITE_MASK) == -1)
2、class ReadHandler : public ACE_Event_Handler
3、重载以下两个函数:
virtual int ReadHandler ::handle_input(ACE_HANDLE = ACE_INVALID_HANDLE);
virtual int ReadHandler ::handle_output (ACE_HANDLE fd = ACE_INVALID_HANDLE);
4、客户端既调用send_n,也调用recv_n

出现的问题:
服务端的ReadHandler发送数据的时候会调用handle_output ,但始终不调用handle_input,即不接收客户端send_n发送的数据;

如果Reactor只注册读事件,if (mReactor->register_handler(reader,
                ACE_Event_Handler::READ_MASK) == -1)
这时,服务端的ReadHandler调用handle_input,可以正常接收客户端send_n发送的数据。

如何才能服务端同时支持两种事件?
发表于 2010-8-25 23:58:11 | 显示全部楼层
你的程序是在windows下还是linux下的?不同的reactor在两种操作系统下面handle_output触发机制是不一样的,按照你的现象描述的,你在handle_output里面是不是用了return 1;导致一直在死循环的调用handle_output
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

Archiver|手机版|小黑屋|ACE Developer ( 京ICP备06055248号 )

GMT+8, 2024-11-22 07:02 , Processed in 0.013032 second(s), 6 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表