Project

General

Profile

Bug #7100

WEBrick::HTTPServer.new で BindAddress を指定しない場合に必ず警告が記録される

Added by sho-h (Sho Hashimoto) almost 8 years ago. Updated over 7 years ago.

Status:
Closed
Priority:
Normal
Target version:
ruby -v:
ruby 1.9.3p194 (2012-04-20 revision 35410) [x86_64-linux]
Backport:
[ruby-dev:46189]

Description

=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


Files

Also available in: Atom PDF