localhostと127.0.1.1
127.0.0.1は自分自身を表すIPだが,debianでマシン名に対応するIPは127.0.1.1となっている. つまり,自分自身には,127.0.0.1と127.0.1.1と割り当てられているIPが対応している. サーバーを立てているPCから,そのサーバーにアクセスしたときには,上記のどのIPを使うかによって,サーバーから見た接続先が異なっている.
例えば,rubyでserve側で
require "socket" s=TCPServer.new(3030) p s.accept.peeraddr
としてから,client側で
require "socket"
s=TCPSocket.open('localhost',3030)
とすると,serve側には
["AF_INET", 37666, "127.0.0.1", "127.0.0.1"]
などと表示される. 一方,localhostの代わりに,割り当てられたIPを指定すると,割り当てられたIPが表示される.
今回苦しんだのが,127.0.1.1にアクセスした場合の振る舞いである. 私の2009/1/16のブログを見るとその時のrubyでは,127.0.1.1と表示されたようである. しかし,最近のrubyでは,127.0.0.1と表示されるように変わったようである. 昔書いたプログラムを新しいPCで動かそうとして,がなかなか思ったように動かなかったが,これが原因だったようである.