找回密码
 用户注册

QQ登录

只需一步,快速开始

楼主: sokiiya

[还是没解决]有关ACE_SOCK_Connector的connect()

[复制链接]
 楼主| 发表于 2008-5-26 11:02:25 | 显示全部楼层
没有重用,两次的remote_addr是不同的。
 楼主| 发表于 2008-5-26 11:10:25 | 显示全部楼层
可以看到ACE_INET_Addr那个类里面,
inet_addr.sin_addr.S_un.S_un_b两次分别是10.80.1.104和10.80.1.115
inet_addr.sin_addr.S_un.S_un_w两次分别是{s_w1=20490 s_w2=26625}和{s_w1=20490 s_w2=29441}
inet_addr.sin_addr.S_un.S_addr两次分别是1744916490和1929465866




测试程序大致是这样:
int ACE_TMAIN(int argc, ACE_TCHAR* argv[])
{
        ACE_Thread::spawn((ACE_THR_FUNC)worker1);
        ACE_Thread::spawn((ACE_THR_FUNC)worker2);
//......and so on
}


ACE_THR_FUNC_RETURN worker1(void*)
{
        ACE_INET_Addr remote_addr(5050, "10.80.1.115");
        ACE_INET_Addr local_addr(8067);
        ACE_SOCK_Connector connector;
        ACE_SOCK_Stream stream;

        if (connector.connect(stream, remote_addr, 0, local_addr, 1) == -1)
        {
                ACE_OS::sleep(3);
                ACE_ERROR_RETURN((LM_ERROR, "(%P|%t) %p\n", "connection fail"), -1);
        }
//.....and so on
}


ACE_THR_FUNC_RETURN worker2(void*)
{
        ACE_INET_Addr remote_addr(5050, "10.80.1.104");
        ACE_INET_Addr local_addr(8067);
        ACE_SOCK_Connector connector;
        ACE_SOCK_Stream stream;

        if (connector.connect(stream, remote_addr, 0, local_addr, 1) == -1)
        {
                ACE_OS::sleep(3);
                ACE_ERROR_RETURN((LM_ERROR, "(%P|%t) %p\n", "connection fail"), -1);
        }
//.....and so on
}

[ 本帖最后由 sokiiya 于 2008-5-26 11:26 编辑 ]
发表于 2008-5-26 11:48:05 | 显示全部楼层
你的代码有问题。
你不能同时用两个socket绑定本地同一个地址和端口,肯定出错。但一个socket,可以同时链接很多外部的地址。
 楼主| 发表于 2008-5-26 12:39:27 | 显示全部楼层
厄=,=||||||||||
如何用一个socket?
难道用同一个 ACE_SOCK_Connector去连接吗?

[ 本帖最后由 sokiiya 于 2008-5-26 13:16 编辑 ]
发表于 2008-5-26 13:39:00 | 显示全部楼层
对啊。当然可以!
 楼主| 发表于 2008-5-26 14:30:52 | 显示全部楼层
目前,把
        ACE_INET_Addr local_addr(8067);
        ACE_SOCK_Connector connector;
这两个都提成全局的了,可是还有同样的错误!:(
发表于 2008-5-26 16:16:44 | 显示全部楼层
不要用线程,顺序去链接不同的地址试试。
 楼主| 发表于 2008-5-26 17:22:47 | 显示全部楼层
试了还是不行,socket不会在connect函数里吧。。。
发表于 2008-5-26 18:27:43 | 显示全部楼层
选择外部工具进行追踪。
TCPVIEW或者sniffer等,你看一下是否有SYN等消息。如果没有,则问题出在本地。
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

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

GMT+8, 2024-12-23 18:48 , Processed in 0.020271 second(s), 4 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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