用同一个ACE_INET_Addr local_addr(3366);
去reuse端口,发出各个连接。
if (connector.connect(stream, remote_addr, 0, local_addr, 1) == -1)
{
ACE_ERROR_RETURN((LM_ERROR, "(%P|%t) %p\n", "connection failed"), -1);
}
第一个进程这样做可以连到remote_addr。
再开一个connect的时候就出错了,ACE_ERROR_RETURN打印出来“connection failed:address already in use”。
那个connect的第五个参数“1”已经表示reuse了,但是怎么还会出现这样的问题呢?
[ 本帖最后由 sokiiya 于 2008-5-26 10:07 编辑 ]

最新回复
如果本机中,这四项内容重复,无论你如何设置重用地址,也是没用的。你去除端口的指定试试。
ACE_INET_Addr server_addr(5050);
acceptor.open(server_addr, 1)
不知道我还少了什么呢?
QUOTE:
试了,当然可以,这样就不是从同一端口出发了。可是目前需要复用那个端口。。。
如果对端地址是一样的,那肯定是没办法重用的,必然冲突。这个是TCP的设计,无法逾越。
QUOTE:
呵呵~~~我知道了,就是你说的“本地地址、端口 -> 对端地址、端口”这4个都重复了。所以才不行。懂了。谢谢。
我从一台机器连到两个不同server,这时候,又出现了address already in use的错误。。。。
{
ACE_ERROR_RETURN((LM_ERROR, "(%P|%t) %p\n", "connection failed"), -1);
}
打印出来“connection failed:address already in use”。
怎么看,需要进入connect函数吗?
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 编辑 ]
你不能同时用两个socket绑定本地同一个地址和端口,肯定出错。但一个socket,可以同时链接很多外部的地址。
如何用一个socket?
难道用同一个 ACE_SOCK_Connector去连接吗?
[ 本帖最后由 sokiiya 于 2008-5-26 13:16 编辑 ]
ACE_INET_Addr local_addr(8067);
ACE_SOCK_Connector connector;
这两个都提成全局的了,可是还有同样的错误!
TCPVIEW或者sniffer等,你看一下是否有SYN等消息。如果没有,则问题出在本地。