找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 5074|回复: 5

如何判断ACE_Asynch_Connector连接有效性?

[复制链接]
发表于 2010-7-8 15:56:31 | 显示全部楼层 |阅读模式
想构造一个连接池,里面存放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消息返回。
 楼主| 发表于 2010-7-9 16:26:16 | 显示全部楼层

回复 #1 boring98 的帖子

解决了。方法是:
for循环中,每次建立连接之后Sleep(10)

为啥需要Sleep呢?服务器端应付不过来?求牛人解释,谢谢!
发表于 2010-7-9 22:57:16 | 显示全部楼层
关注~~~~~~~~~~~~
发表于 2010-7-15 00:22:16 | 显示全部楼层
1.
一般而言,单一线程中的sleep永远都是错的。
呵呵。
2.
既然是异步方式,一定是通过handle_whatever来确认的。你的代码显然不对。
发表于 2010-7-15 08:57:56 | 显示全部楼层
可以尝试修改一下linsten函数的backlog参数的大小,
对于Asyn_Accptor的open函数恰好已经将这个参数暴露了出来。
发表于 2010-7-15 09:22:29 | 显示全部楼层
1.
一般而言,单一线程中的sleep永远都是错的。
呵呵。
2.
既然是异步方式,一定是通过handle_whatever来确 ...
steven99ca 发表于 2010-7-15 00:22


:victory:
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

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

GMT+8, 2024-5-18 11:58 , Processed in 0.013959 second(s), 6 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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