diff --git a/lib/capybara/server.rb b/lib/capybara/server.rb index b0f41037..5f145426 100644 --- a/lib/capybara/server.rb +++ b/lib/capybara/server.rb @@ -83,10 +83,8 @@ class Capybara::Server private def find_available_port - server = TCPServer.new('127.0.0.1', 0) - @port = server.addr[1] - ensure - server.close if server + @port = 9887 + @port += 1 while is_port_open?(@port) and not is_running_on_port?(@port) end def is_running_on_port?(tested_port) @@ -99,4 +97,18 @@ private return false end + def is_port_open?(tested_port) + Timeout::timeout(1) do + begin + s = TCPSocket.new(host, tested_port) + s.close + return true + rescue Errno::ECONNREFUSED, Errno::EHOSTUNREACH + return false + end + end + rescue Timeout::Error + return false + end + end