1
0
Fork 0
mirror of https://github.com/teampoltergeist/poltergeist.git synced 2022-11-09 12:05:00 -05:00

Avoid Errno::EADDRINUSE on JRuby

This commit is contained in:
Jon Leighton 2012-02-29 23:36:09 +00:00
parent 4f7a22728c
commit ebd45ae1c5

View file

@ -54,16 +54,30 @@ module Capybara::Poltergeist
# just keep reading until we've received a full frame)
RECV_SIZE = 1024
# How many seconds to try to bind to the port for before failing
BIND_TIMEOUT = 5
attr_reader :port, :parser, :socket, :handler, :server
attr_accessor :timeout
def initialize(port, timeout = nil)
@port = port
@parser = Http::Parser.new
@server = TCPServer.open(port)
@server = start_server
@timeout = timeout
end
def start_server
time = Time.now
TCPServer.open(port)
rescue Errno::EADDRINUSE
if (Time.now - time) < BIND_TIMEOUT
retry
else
raise
end
end
def connected?
!socket.nil?
end
@ -127,10 +141,7 @@ module Capybara::Poltergeist
end
def close
[server, socket].compact.each do |s|
s.close_read
s.close_write
end
[server, socket].compact.each { |s| s.close }
end
end
end