找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 8372|回复: 18

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

[复制链接]
发表于 2008-5-26 09:29:54 | 显示全部楼层 |阅读模式
用同一个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 编辑 ]
发表于 2008-5-26 09:32:34 | 显示全部楼层
TCP是依靠2对地址来唯一标识一个链接的。本地地址、端口 -> 对端地址、端口。
如果本机中,这四项内容重复,无论你如何设置重用地址,也是没用的。你去除端口的指定试试。
 楼主| 发表于 2008-5-26 09:33:12 | 显示全部楼层
服务端打开的时候也用了reuse参数:
ACE_INET_Addr server_addr(5050);
acceptor.open(server_addr, 1)

不知道我还少了什么呢?
 楼主| 发表于 2008-5-26 09:36:10 | 显示全部楼层
原帖由 winston 于 2008-5-26 09:32 发表
TCP是依靠2对地址来唯一标识一个链接的。本地地址、端口 -> 对端地址、端口。
如果本机中,这四项内容重复,无论你如何设置重用地址,也是没用的。你去除端口的指定试试。 ...


试了,当然可以,这样就不是从同一端口出发了。
可是目前需要复用那个端口。。。
发表于 2008-5-26 09:46:34 | 显示全部楼层
重用端口意义在哪里?
如果对端地址是一样的,那肯定是没办法重用的,必然冲突。这个是TCP的设计,无法逾越。
 楼主| 发表于 2008-5-26 09:47:14 | 显示全部楼层
原帖由 winston 于 2008-5-26 09:32 发表
TCP是依靠2对地址来唯一标识一个链接的。本地地址、端口 -> 对端地址、端口。
如果本机中,这四项内容重复,无论你如何设置重用地址,也是没用的。你去除端口的指定试试。 ...


呵呵~~~我知道了,就是你说的“本地地址、端口 -> 对端地址、端口”这4个都重复了。
所以才不行。懂了。谢谢。
 楼主| 发表于 2008-5-26 10:01:41 | 显示全部楼层
。。。。。。不过又有问题了。
我从一台机器连到两个不同server,这时候,又出现了address already in use的错误。。。。
发表于 2008-5-26 10:07:31 | 显示全部楼层
打开DEBUG,看看错误的细节信息。
 楼主| 发表于 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函数吗?
发表于 2008-5-26 10:35:39 | 显示全部楼层
看看地址信息,是否重复。
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

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

GMT+8, 2024-12-23 18:35 , Processed in 0.022469 second(s), 5 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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