Chinaunix首页 | 论坛 | 博客
  • 博客访问: 117207
  • 博文数量: 16
  • 博客积分: 936
  • 博客等级: 准尉
  • 技术积分: 170
  • 用 户 组: 普通用户
  • 注册时间: 2010-03-03 16:16
文章分类

全部博文(16)

文章存档

2015年(2)

2014年(1)

2012年(2)

2011年(2)

2010年(9)

分类:

2010-12-23 12:26:47

1、ACE_WFMO_Reactor()->run_reactor_event_loop()事件之前,需要进行ACE_WFMO_Reactor()->owner(ACE_OS::thr_self())这样的调用,以指定使用当前线程进行事件转发。否则使用msg_queue的notify策略进行写事件的触发来进行handle_output的回调会只调用一两次,不会进行多次回调有问题,原因正在进一步分析。

2、ACE_WFMO_Reactor()这个reactor使用的是WaitForMultipleObjectEx进行IO多路事件转发,所以它的FD_WRITE的事件触发是边缘触发(ET),只有socket连接成功时或者send遇到EWOULDBLOCK之后,当socket又变为可写入时才会回调。在进行send处理时,需要考虑在handle_out的入口里进行WRITE_MASK的取消cancel_wakeup(handle, ACE_Event_Handler::WRITE_MASK),以及在send返回-1,且errno = EWOULDBLOCK时,schedule_wakeup(handle, ACE_Event_Handler::WRITE_MASK)来进行写事件的注册,以便当socket可写时可以由reactor即时回调handle_output。
阅读(12447) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~