sokiiya 发表于 2008-5-26 09:29:54

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

用同一个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 编辑 ]

winston 发表于 2008-5-26 09:32:34

TCP是依靠2对地址来唯一标识一个链接的。本地地址、端口 -> 对端地址、端口。
如果本机中,这四项内容重复,无论你如何设置重用地址,也是没用的。你去除端口的指定试试。

sokiiya 发表于 2008-5-26 09:33:12

服务端打开的时候也用了reuse参数:
ACE_INET_Addr server_addr(5050);
acceptor.open(server_addr, 1)

不知道我还少了什么呢?

sokiiya 发表于 2008-5-26 09:36:10

原帖由 winston 于 2008-5-26 09:32 发表 http://www.acejoy.com/bbs/images/common/back.gif
TCP是依靠2对地址来唯一标识一个链接的。本地地址、端口 -> 对端地址、端口。
如果本机中,这四项内容重复,无论你如何设置重用地址,也是没用的。你去除端口的指定试试。 ...


试了,当然可以,这样就不是从同一端口出发了。
可是目前需要复用那个端口。。。

winston 发表于 2008-5-26 09:46:34

重用端口意义在哪里?
如果对端地址是一样的,那肯定是没办法重用的,必然冲突。这个是TCP的设计,无法逾越。

sokiiya 发表于 2008-5-26 09:47:14

原帖由 winston 于 2008-5-26 09:32 发表 http://www.acejoy.com/bbs/images/common/back.gif
TCP是依靠2对地址来唯一标识一个链接的。本地地址、端口 -> 对端地址、端口。
如果本机中,这四项内容重复,无论你如何设置重用地址,也是没用的。你去除端口的指定试试。 ...


呵呵~~~我知道了,就是你说的“本地地址、端口 -> 对端地址、端口”这4个都重复了。
所以才不行。懂了。谢谢。

sokiiya 发表于 2008-5-26 10:01:41

。。。。。。不过又有问题了。
我从一台机器连到两个不同server,这时候,又出现了address already in use的错误。。。。

winston 发表于 2008-5-26 10:07:31

打开DEBUG,看看错误的细节信息。

sokiiya 发表于 2008-5-26 10:32:31

if (connector.connect(stream, remote_addr, 0, local_addr, 1) == -1)
{
ACE_ERROR_RETURN((LM_ERROR, "(%P|%t) %p\n", "connection failed"), -1);
}
打印出来“connection failed:address already in use”。

怎么看,需要进入connect函数吗?

winston 发表于 2008-5-26 10:35:39

看看地址信息,是否重复。
页: [1] 2
查看完整版本: [还是没解决]有关ACE_SOCK_Connector的connect()