Problem with Socket.getaddrinfo inside controller or model

I am using Rails 2.2.2, trying to get hostname by IP with code like

require 'socket' Socket.getaddrinfo('221.186.184.68', nil, "AF_INET")

In the rails console it works well and gives me:

[["AF_INET", 0, "carbon.ruby-lang.org", "221.186.184.68", 2, 2, 17], ["AF_INET", 0, "carbon.ruby-lang.org", "221.186.184.68", 2, 1, 6]]

But, inside model or controller output different:

[["AF_INET", 0, "221.186.184.68", "221.186.184.68", 2, 2, 17], ["AF_INET", 0, "221.186.184.68", "221.186.184.68", 2, 1, 6]]

Please help to fix and get hostname by ip inside model.

Hi,

There is a method in mongrel gem, mongrel.rb, Mongrel::HttpServer#run which has a line:

BasicSocket.do_not_reverse_lookup=true

and it seems this changes the global state of the Socket class. So, basically I did this:

BasicSocket.do_not_reverse_lookup=false Socket.getaddrinfo(some_ip, nil, "AF_INET") BasicSocket.do_not_reverse_lookup=true # In case nothing goes wrong with mongrel :slight_smile:

Quit annoying stuff, I found it almost accidently, doubt it is somewhere documented.