关于ACE_Proactor的两个问题
1. 调用ACE_Asynch_Connector的方法 connect 连接失败时(就像超时这种不会立即返回失败的情况),ACE没有没提供是什么方法可以通知我,连接已经失败了?2. 是不是在ACE_Proactor中,要想检测连接是不否断开,只有能过不断read,在 handle_read_stream 中来判断?
先谢谢回贴的朋友。 1.我们可以继承validate_connection方法,如果连接创建失败,框架会自动调用我们继承的validate_connection方法,我们自己可以根据结果判断如何处理
2.有点没看懂,不过如果想实时检测连接是否断开,可能需要自己主动探查。 多谢, 我试了一下, 在validate_connection 中是可以通过 result.success() 来判断连接操作是否成功。
int CMyConnector::validate_connection (const ACE_Asynch_Connect::Result& result,
const ACE_INET_Addr &remote,
const ACE_INET_Addr& local)
{
if ( ! result.success() )
{
//如果连接失败
return -1;
}
return 0;
}
第二个问题我是想说,连接已经建好, 但当对端主对closesocket,断开连接时,别一端如何检测到? 在Reactor中,有一个handle_close,面Proactor中好像没有相关方法... 第二个问题是经典问题,TCP不提供断开的主动通知,所以一般都是自己做心跳检查,在handle_read_stream 中判定,如果出现错误,就关闭链接。不需要handle_close方法。 嗯,了解了。 多谢
断开通知的问题我在用ACE_Reactor时,也是用心跳包去做的, 只是在用Proactor时奇怪没找到handle_close, 呵呵 如果是对端主动关闭,那么会在 handle_read_stream得到通知。
如果是网络中断,那么不会了,需要自己检测或者设置 TCP_KEEPALIVE的支持 TCP_KEEPALIVE不是好选择,参见UNIX网络编程中的解释。
页:
[1]