diff --git a/lib/puma/binder.rb b/lib/puma/binder.rb index cfd55a3bdc..30612e8e67 100644 --- a/lib/puma/binder.rb +++ b/lib/puma/binder.rb @@ -245,9 +245,10 @@ def parse(binds, logger) end end - def localhost_addresses - addrs = TCPSocket.gethostbyname "localhost" - addrs[3..-1].uniq + def loopback_addresses + Socket.ip_address_list.select do |addrinfo| + addrinfo.ipv6_loopback? || addrinfo.ipv4_loopback? + end.map { |addrinfo| addrinfo.ip_address } end # Tell the server to listen on host +host+, port +port+. @@ -259,7 +260,7 @@ def localhost_addresses # def add_tcp_listener(host, port, optimize_for_latency=true, backlog=1024) if host == "localhost" - localhost_addresses.each do |addr| + loopback_addresses.each do |addr| add_tcp_listener addr, port, optimize_for_latency, backlog end return @@ -298,7 +299,7 @@ def add_ssl_listener(host, port, ctx, MiniSSL.check if host == "localhost" - localhost_addresses.each do |addr| + loopback_addresses.each do |addr| add_ssl_listener addr, port, ctx, optimize_for_latency, backlog end return