def start_background(wait = 5)
@server = WEBrick::HTTPServer.new(
:DoNotListen => true,
:AccessLog => [],
:Logger => WEBrick::Log.new(StringIO.new, 7),
:SSLEnable => options[:ssl],
:SSLCertName => [ [ 'CN', WEBrick::Utils::getservername ] ],
:StartCallback => proc {
@running = true
}
)
ENV['HTTPS'] = 'on' if options[:ssl]
@server.mount('/', Rack::Handler::WEBrick, app)
if options[:port].respond_to?(:each)
options[:port].each do |port|
begin
@server.listen(options[:host], port)
@port = port
break
rescue Errno::EADDRINUSE
ChefZero::Log.info("Port #{port} in use: #{$!}")
end
end
if !@port
raise Errno::EADDRINUSE, "No port in :port range #{options[:port]} is available"
end
else
@server.listen(options[:host], options[:port])
@port = options[:port]
end
@thread = Thread.new do
begin
Thread.current.abort_on_exception = true
@server.start
ensure
@port = nil
@running = false
end
end
while !@running && @thread.alive?
sleep(0.01)
end
SocketlessServerMap.instance.register_port(@port, self)
@thread
end