about summary refs log tree commit homepage
diff options
context:
space:
mode:
-rw-r--r--lib/yahns/server.rb4
-rw-r--r--test/test_bin.rb4
2 files changed, 6 insertions, 2 deletions
diff --git a/lib/yahns/server.rb b/lib/yahns/server.rb
index 67dfea2..3ba7537 100644
--- a/lib/yahns/server.rb
+++ b/lib/yahns/server.rb
@@ -141,8 +141,10 @@ class Yahns::Server # :nodoc:
       @logger.info "listening on addr=#{sock_name(io)} fd=#{io.fileno}"
       @listeners << io
       io
-    rescue Errno::EADDRINUSE => err
+    rescue Errno::EADDRINUSE
       @logger.error "adding listener failed addr=#{address} (in use)"
+      @logger.error "YAHNS_FD=#{ENV['YAHNS_FD']}"
+      system(*%W(lsof -p #$$))
     rescue => err
       @logger.fatal "error adding listener addr=#{address}"
       raise err
diff --git a/test/test_bin.rb b/test/test_bin.rb
index f6d11b2..610c99d 100644
--- a/test/test_bin.rb
+++ b/test/test_bin.rb
@@ -42,10 +42,13 @@ class TestBin < Testcase
     @cmd.concat(%W(-D -c #{cfg.path}))
     addr = IO.pipe
     pid = fork do
+      addr[0].close
       if inherit
         @cmd << { @srv.fileno => @srv }
         ENV["YAHNS_FD"] = @srv.fileno.to_s
       else
+        # we must create the socket inside the child and tell the parent
+        # about it to avoid sharing
         @srv = TCPServer.new(ENV["TEST_HOST"] || "127.0.0.1", 0)
         @srv.close_on_exec = true # needed for 1.9.3
       end
@@ -53,7 +56,6 @@ class TestBin < Testcase
       listen = ENV["YAHNS_TEST_LISTEN"] = "#{host}:#{port}"
       addr[1].write(listen)
       addr[1].close
-      addr[0].close
       exec(*@cmd)
     end
     addr[1].close