From ec44a81ed6037fc3e39ea6c811b6de558a4dd424 Mon Sep 17 00:00:00 2001 From: Evan Phoenix Date: Thu, 25 Apr 2019 16:27:27 -0700 Subject: [PATCH] Report tcp 0 port properly. Fixes #1679 Bonus feature: we now log all localhost addresses that we're bound to, including ipv6 ones. --- lib/puma/binder.rb | 11 ++++++++++- test/test_binder.rb | 20 ++++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/lib/puma/binder.rb b/lib/puma/binder.rb index 1c498dbf21..6880242044 100644 --- a/lib/puma/binder.rb +++ b/lib/puma/binder.rb @@ -111,7 +111,16 @@ def parse(binds, logger) bak = params.fetch('backlog', 1024).to_i io = add_tcp_listener uri.host, uri.port, opt, bak - logger.log "* Listening on #{str}" + + @ios.each do |i| + addr = if i.local_address.ipv6? + "[#{i.local_address.ip_unpack[0]}]:#{i.local_address.ip_unpack[1]}" + else + i.local_address.ip_unpack.join(':') + end + + logger.log "* Listening on tcp://#{addr}" + end end @listeners << [str, io] if io diff --git a/test/test_binder.rb b/test/test_binder.rb index 89a7e58416..499adddc32 100644 --- a/test/test_binder.rb +++ b/test/test_binder.rb @@ -95,4 +95,24 @@ def test_binder_parses_tlsv1_1_enabled refute ssl_context_for_binder(@binder).no_tlsv1_1 end + + def test_correct_zero_port + @events = Puma::Events.strings + @binder = Puma::Binder.new(@events) + @binder.parse(["tcp://localhost:0"], @events) + + m = %r!tcp://127.0.0.1:(\d+)!.match(@events.stdout.string) + port = m[1].to_i + + refute_equal 0, port + end + + def test_logs_all_localhost_bindings + @events = Puma::Events.strings + @binder = Puma::Binder.new(@events) + @binder.parse(["tcp://localhost:0"], @events) + + assert_match %r!tcp://127.0.0.1:(\d+)!, @events.stdout.string + assert_match %r!tcp://\[::1\]:(\d+)!, @events.stdout.string + end end