小技巧: ACE_Svc_Handler的初始化

小技巧: ACE_Svc_Handler的初始化
Stone Jiang











ACE_Svc_Handler经常用于网络服务类的基类,这是因为它很容易在主动对象(Active Ojbect)
模式和反应器(Reactor)框架中使用。APG第7.6节中讨论了怎么在接受器-连接器(Acceptor-conector)
框架中如何把ACE_Svc_Handler作为目标来使用,并且,在C++NPv2第7章中,深度探讨了
Acceotor-Connector的相关设计。

挂勾函数(Hook method)ACE_Svc_Handler::open()常是服务中新建连接时执行的初始化设置的地方。
举例来说,如果服务要在日志中记录新连接建立的相关信息,open()函数是则是记录这个信息的地方。
对于使用Reacotor 框架的服务检查网络数据到达,open()是执行reactor注册的地方。
事实上,这正是reactor注册的地方,这种动作在服务建立新连接时非常常见的,ACE_Svc_Handler::
open()的缺省操作也正是


if (this->reactor () && this->reactor ()->register_handler
          (this,
           ACE_Event_Handler::READ_MASK) == -1)
  ACE_ERROR_RETURN ((LM_ERROR,
                     ACE_LIB_TEXT ("%p/n"),
                     ACE_LIB_TEXT ("unable to register client handler")),
                    -1);
return 0;

所以,如果在与服务建立新连接并为“读事件”注册时,你甚至不需要在你的类中
实现open(void*)函数,ACE已经为你做了这一步!另外,请记住,如果reactor注册失败,
默认的open()函数会返回-1,它会引起Acceptor-Connector框架关闭新建的连接和删除这个
事件处理器(handler)。

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值