Focus on ACE

订阅 ace-china
电子邮件:
浏览存于 groups.google.com 上的所有帖子

C++博客 首页 新随笔 联系 聚合 管理
  64 Posts :: 3 Stories :: 22 Comments :: 0 Trackbacks

小技巧: 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)。
Stone Jiang
http://www.cppblog.com/ace/

posted on 2006-08-27 23:48 Stone Jiang 阅读(3765) 评论(0)  编辑 收藏 引用 所属分类: ACE

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理