dustfly207 发表于 2008-9-11 20:31:39

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是如何区分的

先拜大神们了

winston 发表于 2008-9-11 23:58:45

1、连接的时候,可以要求传入地址,进行区分。
2、可以重载一些函数,自己加判断。

daou101 发表于 2008-9-12 15:16:10

方法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]
查看完整版本: ACE_Asynch_Connector的应用问题