找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 4239|回复: 1

和ACE_Connector关联的ACE_Svc_Handler对象什么时候被释放啊?

[复制链接]
发表于 2007-12-21 21:59:16 | 显示全部楼层 |阅读模式
看了ACE_Connector.close()的代码,里面有释放Handler对象的操作。但用例子测试了一下,发现有个奇怪的问题,就是ACE_Connector.close调用之后,还可以成功通过Handler对象来发送数据。用例如下:
  1.     MyServiceHandler * handler= new MyServiceHandler;
  2.         Connector myconnector;
  3.         myconnector.connect(handler, addr);      
  4.             handler->Peer()->send(argv[1],20);
  5.             ACE_OS::printf("before recv in main\n");
  6.             ret =  handler->Peer()->recv(date, 20);
  7.             ACE_OS::printf("after recv in main, back date is %s, ret = %d \n", date, ret);            
  8.       
  9.         myconnector.close();
  10.         //delete handler;      
  11.    
  12.         ACE_OS::sleep(2);
  13.    
  14.         
  15.      ret = handler->Peer()->send(argv[1],20);
  16.      ACE_OS::printf("before exit, ret = %d \n", ret);
复制代码
connector.close()调用之后,最后的一个snd操作是可以成功的, 而且MyServiceHandler 的析构函数也没有立刻调用。
但是把红色的部分注释去掉的话,后面的发送就失败了。

哪位老大帮忙解答一下。多谢多谢。
 楼主| 发表于 2007-12-21 21:59:24 | 显示全部楼层
和ACE_Connector关联的ACE_Svc_Handler对象?????

这是个工厂,你可以connect多次,那来的关联对象。。

ACE_Connector::close()..只是取消所有挂起的非阻塞连接操作,同时调用与这些挂起的连接操作相关的处理器的close()。。
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

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

GMT+8, 2024-5-20 03:34 , Processed in 0.029512 second(s), 7 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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