From 4db1dcd28181f83bca94db41f736d3d6f6aad8ed Mon Sep 17 00:00:00 2001 From: Nate Berkopec Date: Wed, 2 Aug 2017 18:50:50 -0600 Subject: [PATCH] Use Socket.ip_address_list to get loopback addresses (#1318) --- lib/puma/binder.rb | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/lib/puma/binder.rb b/lib/puma/binder.rb index cfd55a3b..eb9a1d2c 100644 --- a/lib/puma/binder.rb +++ b/lib/puma/binder.rb @@ -245,9 +245,10 @@ module Puma 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 }.uniq end # Tell the server to listen on host +host+, port +port+. @@ -259,7 +260,7 @@ module Puma # 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 @@ module Puma 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