|
前几天做一个基于UDP的服务器。需要建立多个处理器,其中一个处理器为主服务,同时侦听2~4个端口;其它为子服务,都针对一个端口。子服务是根据客户端的请求,动态生成的。
由于主服务同时侦听侦听2~4个端口,所以使用了register_handle()一个3参数变体:register_handler (const ACE_Handle_Set &handles, ACE_Event_Handler *event_handler, ACE_Reactor_Mask masks);
子服务使用的是register_handle()常用的2参数变体:register_handler (ACE_Event_Handler *event_handler, ACE_Reactor_Mask mask)
编译一路ok,但在实际运行过程中,当需要动态生成子服务时,报错register_handle()的参数错误。在网上查找,也没有找到如何解决。
后来,怀疑是在一个Reactor实例中(我所有的服务使用ACE_Reactor::instance() )只能用一种register_handle()变体。于是将所有的register_handle()调用统一改为:register_handler (ACE_HANDLE io_handle, ACE_Event_Handler *event_handler, ACE_Reactor_Mask mask)。
问题解决,可以动态生成子服务,并完成相应的功能。 |
|