找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 4000|回复: 2

ACE_Asynch_Connector的应用问题

[复制链接]
发表于 2008-9-11 20:31:39 | 显示全部楼层 |阅读模式
typedef ACE_Asynch_Connector<ClientServiceHandler> AIO_Connector;

int main(int argc, char *argv[])
{
ACE_INET_Addr svrAddr(argv[1]);
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是如何区分的

先拜大神们了
发表于 2008-9-11 23:58:45 | 显示全部楼层
1、连接的时候,可以要求传入地址,进行区分。
2、可以重载一些函数,自己加判断。
发表于 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);但要记得释放这个内存。
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

Archiver|手机版|小黑屋|ACE Developer ( 京ICP备06055248号 )

GMT+8, 2024-11-23 00:29 , Processed in 0.019307 second(s), 6 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表