localhost的奇怪的Socket.getaddrinfo结果

时间:2014-03-20 20:07:19

标签: ruby sockets jruby

我遇到连接数据库的ruby应用程序的问题。经过几个小时的探索,我的问题归结为Socket.getaddrinfo 'localhost', nil返回意外地址:

ruby -e "require \"socket\"; puts Socket.getaddrinfo('localhost', nil).inspect"

[["AF_INET", nil, "10.10.1.37", "10.10.1.37", 2, 2, 17], 
 ["AF_INET", nil, "10.10.1.37", "10.10.1.37", 2, 1, 6], 
 ["AF_INET", nil, "fe80:0:0:0:5e96:9dff:fe94:fce3%5", "fe80:0:0:0:5e96:9dff:fe94:fce3%5", 2, 2, 17], 
 ["AF_INET", nil, "fe80:0:0:0:5e96:9dff:fe94:fce3%5", "fe80:0:0:0:5e96:9dff:fe94:fce3%5", 2, 1, 6]]

10.10.1.37是网络适配器的地址。

我正在使用rvm,当我使用jruby时,这种奇怪的行为就会发生。如果我使用普通的ruby版本,结果就是我所期望的(例如'127.0.0.1')。

根据wikipedia,localhost应该引用本地环回接口。什么可能导致这种行为,这是一个Java东西吗?

我试过的JRuby版本是:1.7.2,1.7.4和1.7.9

预期输出越多(使用常规ruby-1.9.3时):

ruby -e "require \"socket\"; puts Socket.getaddrinfo('localhost', nil).inspect"

[["AF_INET6", 0, "::1", "::1", 30, 2, 17], 
 ["AF_INET6", 0, "::1", "::1", 30, 1, 6], 
 ["AF_INET", 0, "127.0.0.1", "127.0.0.1", 2, 2, 17], 
 ["AF_INET", 0, "127.0.0.1", "127.0.0.1", 2, 1, 6], 
 ["AF_INET6", 0, "fe80::1%lo0", "fe80::1%lo0", 30, 2, 17], 
 ["AF_INET6", 0, "fe80::1%lo0", "fe80::1%lo0", 30, 1, 6]]

1 个答案:

答案 0 :(得分:1)

这看起来像jruby中的错误。他们尽可能地保持与MRI的兼容性,并且当没有发生时,除非另有说明,否则它被认为是一个错误。您应该在Github

处与他们打开一个问题

修改

我无法在运行jruby 1.7.10的Linux或使用1.7.8的OS X上重现这一点,但它对我来说似乎仍然是个错误。