如何判断ACE_Asynch_Connector连接有效性?
想构造一个连接池,里面存放ACE_Asynch_Connector派生类MY_Connector对象的指针。连接池的初始化用如下方法循环100次,若不为NULL则插入连接池:addr_为服务器的地址和端口。
MY_Connector *p_tmp = new MY_Connector();
if(-1 != p_tmp->open())
{
if(-1 != p_tmp->connect(addr_))
{
return p_tmp;
}
else
{
delete p_tmp;
return NULL;
}
}
else
{
delete p_tmp;
return NULL;
}
每次程序都显示100个不为NULL的MY_Connector指针成功放入连接池,但用netstat察看网络连接状况,发现实际建立的连接只有7、80个。
而MY_Connector类也写了有效性判断:
int MY_Connector::validate_connection(
const ACE_Asynch_Connect::Result& result
, const ACE_INET_Addr &remote
, const ACE_INET_Addr& local)
{
if (!result.success())
{
ACE_DEBUG((LM_ERROR, ACE_TEXT("%p\n"), ACE_TEXT("validate_connection")));
return -1;
}
else
{
return 0;
}
}
问一下各位牛人,如何判断连接的有效性?我的程序问题出在何处?
另外,用Wireshark察看网络通讯情况发现失败的连接除了建立连接的三次握手之外,服务器都有RST消息返回。
回复 #1 boring98 的帖子
解决了。方法是:for循环中,每次建立连接之后Sleep(10)
为啥需要Sleep呢?服务器端应付不过来?求牛人解释,谢谢! 关注~~~~~~~~~~~~ 1.
一般而言,单一线程中的sleep永远都是错的。
呵呵。
2.
既然是异步方式,一定是通过handle_whatever来确认的。你的代码显然不对。 可以尝试修改一下linsten函数的backlog参数的大小,
对于Asyn_Accptor的open函数恰好已经将这个参数暴露了出来。 1.
一般而言,单一线程中的sleep永远都是错的。
呵呵。
2.
既然是异步方式,一定是通过handle_whatever来确 ...
steven99ca 发表于 2010-7-15 00:22 http://www.acejoy.com/bbs/images/common/back.gif
:victory:
页:
[1]