peakzhang 发表于 2007-12-21 21:59:16

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

看了ACE_Connector.close()的代码,里面有释放Handler对象的操作。但用例子测试了一下,发现有个奇怪的问题,就是ACE_Connector.close调用之后,还可以成功通过Handler对象来发送数据。用例如下:

    MyServiceHandler * handler= new MyServiceHandler;
      Connector myconnector;
      myconnector.connect(handler, addr);      
            handler->Peer()->send(argv,20);
            ACE_OS::printf("before recv in main\n");
            ret =handler->Peer()->recv(date, 20);
            ACE_OS::printf("after recv in main, back date is %s, ret = %d \n", date, ret);            
      
      myconnector.close();
      //delete handler;      
   
      ACE_OS::sleep(2);
   
      
   ret = handler->Peer()->send(argv,20);
   ACE_OS::printf("before exit, ret = %d \n", ret);

connector.close()调用之后,最后的一个snd操作是可以成功的, 而且MyServiceHandler 的析构函数也没有立刻调用。
但是把红色的部分注释去掉的话,后面的发送就失败了。

哪位老大帮忙解答一下。多谢多谢。

peakzhang 发表于 2007-12-21 21:59:24

和ACE_Connector关联的ACE_Svc_Handler对象?????

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

ACE_Connector::close()..只是取消所有挂起的非阻塞连接操作,同时调用与这些挂起的连接操作相关的处理器的close()。。
页: [1]
查看完整版本: 和ACE_Connector关联的ACE_Svc_Handler对象什么时候被释放啊?