ACE_Asynch_Connector的应用问题
typedef ACE_Asynch_Connector<ClientServiceHandler> AIO_Connector;int main(int argc, char *argv[])
{
ACE_INET_Addr svrAddr(argv);
AIO_Connector aio_connector;
int retval = aio_connector.open(1, ACE_Proactor::instance());
for (int i=0; i<5; i++)
aio_connector.connect(svrAddr);
ACE_Proactor::instance()->proactor_run_event_loop();
return 1;
}
其中ClientServiceHandler继承自ACE_Service_Handler
aio_connector连接多次的时候,ClientServiceHandler的成员函数open会回调,但怎样区分哪个ClientServiceHandler对应哪次aio_connector.connect(svrAddr)调用呢??
因为同步的ACE_Connector的connect函数需要一个Event_Handler指针作为参数,所以不同的connect调用可以区分,不知道ACE_Asynch_Connector是如何区分的
先拜大神们了 1、连接的时候,可以要求传入地址,进行区分。
2、可以重载一些函数,自己加判断。 方法1:valid_address hook函数能够得到连接地址,此时你可以针对不同地址不同处理;
方法2:///初始化一个新的异步连接。
virtual int connect (const ACE_INET_Addr &remote_sap,
const ACE_INET_Addr &local_sap =
(const ACE_INET_Addr &)ACE_Addr::sap_any,
int reuse_addr = 1,
const void *act = 0);
把*act赋值为一个你需要的标识,注意,他必须位于heap上,而不是局部变量,你可以new int(i);但要记得释放这个内存。
页:
[1]