Reactor模式中ReadHandler不能同时READ_MASK和WRITE_MASK
本帖最后由 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发送的数据。
如何才能服务端同时支持两种事件? 你的程序是在windows下还是linux下的?不同的reactor在两种操作系统下面handle_output触发机制是不一样的,按照你的现象描述的,你在handle_output里面是不是用了return 1;导致一直在死循环的调用handle_output
页:
[1]