From: "mame (Yusuke Endoh)" Date: 2012-11-05T21:37:13+09:00 Subject: [ruby-dev:46404] [ruby-trunk - Bug #7100][Assigned] WEBrick::HTTPServer.new で BindAddress を指定しない場合に必ず警告が記録される Issue #7100 has been updated by mame (Yusuke Endoh). Status changed from Open to Assigned Assignee set to akr (Akira Tanaka) Target version set to 2.0.0 akr さん、どう思われますか? -- Yusuke Endoh ---------------------------------------- Bug #7100: WEBrick::HTTPServer.new で BindAddress を指定しない場合に必ず警告が記録される https://bugs.ruby-lang.org/issues/7100#change-32403 Author: sho-h (Sho Hashimoto) Status: Assigned Priority: Low Assignee: akr (Akira Tanaka) Category: Target version: 2.0.0 ruby -v: ruby 1.9.3p194 (2012-04-20 revision 35410) [x86_64-linux] =begin 以下のようにすると必ず警告が記録されるようです。 $ ruby -v -r webrick -e 'WEBrick::HTTPServer.new(Port: 3000)' ruby 1.9.3p194 (2012-04-20 revision 35410) [x86_64-linux] [2012-09-04 19:20:48] INFO WEBrick 1.3.1 [2012-09-04 19:20:48] INFO ruby 1.9.3 (2012-04-20) [x86_64-linux] [2012-09-04 19:20:48] WARN TCPServer Error: Address already in use - bind(2) 1.8 では記録されませんでした。1.9.1 以降は記録されました。 lib/webrick/utils.rb の WEBrick::Utils#create_listeners が以下のようになっており、 res = Socket::getaddrinfo(address, port, Socket::AF_UNSPEC, # address family Socket::SOCK_STREAM, # socket type 0, # protocol Socket::AI_PASSIVE) # flag last_error = nil sockets = [] res.each{|ai| begin logger.debug("TCPServer.new(#{ai[3]}, #{port})") if logger sock = TCPServer.new(ai[3], port) ... Socket.getaddrinfo が 1.9 から複数値を返すからのようです。1.8.7 だと 0.0.0.0 の方だけでした。 $ ruby -v -r pp -r socket -e 'pp Socket::getaddrinfo(nil, 3000, Socket::AF_UNSPEC, Socket::SOCK_STREAM, 0, Socket::AI_PASSIVE)' ruby 1.9.3p194 (2012-04-20 revision 35410) [x86_64-linux] [["AF_INET", 3000, "0.0.0.0", "0.0.0.0", 2, 1, 6], ["AF_INET6", 3000, "::", "::", 10, 1, 6]] WEBrick::Utils#create_listeners のコメントとマッチしなくなるデメリットがあるのですが、config[:BindAddress] のデフォルト値を 0.0.0.0 か :: のどちらかにしてしまうのはいかがでしょう。 =end -- http://bugs.ruby-lang.org/