Bug #7100 » webrick-dont-use-ipv4-mapped-ipv6-address.patch
| lib/webrick/utils.rb (working copy) | ||
|---|---|---|
|
unless port
|
||
|
raise ArgumentError, "must specify port"
|
||
|
end
|
||
|
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)
|
||
|
port = sock.addr[1] if port == 0
|
||
|
Utils::set_close_on_exec(sock)
|
||
|
sockets << sock
|
||
|
rescue => ex
|
||
|
logger.warn("TCPServer Error: #{ex}") if logger
|
||
|
last_error = ex
|
||
|
end
|
||
|
sockets = Socket.tcp_server_sockets(address, port)
|
||
|
sockets = sockets.map {|s|
|
||
|
s.autoclose = false
|
||
|
TCPServer.for_fd(s.fileno)
|
||
|
}
|
||
|
raise last_error if sockets.empty?
|
||
|
return sockets
|
||
|
end
|
||
|
module_function :create_listeners
|
||