ACE_Asynch_Connector的使用问题
我在使用ACE_Asynch_Connector<class HANDLER>框架的时候遇到一个问题:我从ACE_Asynch_Connector的派生出我们使用的类,作为单件使用,然后调用connect方法,
然后框架会回调make_handler,创建socket句柄,在回调addresses传入地址,最后回调validate_connection检查连接是否建立.
这时候可以可以产生一个以HANDLER为处理器的tcp连接,这时候如果因为某种需要,我主动关闭了socket,
比如:
ACE_OS::shutdown(this->handle(),SD_SEND);
ACE_OS::closesocket(this->handle());
this->handle(ACE_INVALID_HANDLE);
下次重新调用单件的connect方法,建立新的连接的时候,就无法产生TCP连接了.
[ 本帖最后由 okibun0129 于 2008-4-26 16:16 编辑 ] 要看是什么错误,才好分析出来。 分享我的调试经验,这是由于调用次序不当导致的,现已经解决。
由于ACE_Asynch_Connector<class HANDLER>框架并没有聚合HANDLER,也没有必要使用聚合,因此我使用成员变量去保存HANDLER。
因此后面创建的HANDLER会覆盖前一次创建的HANDLER,
由于HANDLER会在Proactor中注册自己,因此无须考虑资源泄露,Proactor会帮助我们释放前一次的HANDLER,
我的问题是由于,我主动调用关闭Socket的时机不当导致的,
我本想在Makehandler内,先关闭Socket,然后在New HANDLER,以达到创建新的TCP链接的时候,自动关闭旧的TCP链接
但是由于是多线程调用,实际调用次序是,我先创建了新的HANDLER,然后才执行到Handler内部的关闭操作,关闭Secket。
这样新创建的HANDLER直接就被我关闭了。所以尽管我发现HANDLER的Open函数确实被调用了,但是最终却无法产生TCP连接.
[ 本帖最后由 okibun0129 于 2008-4-26 17:08 编辑 ]
页:
[1]