# File lib/chef_zero/server.rb, line 205
    def start_background(wait = 5)
      @server = WEBrick::HTTPServer.new(
        :DoNotListen => true,
        :AccessLog   => [],
        :Logger      => WEBrick::Log.new(StringIO.new, 7),
        :StartCallback => proc {
          @running = true
        }
      )
      @server.mount('/', Rack::Handler::WEBrick, app)

      # Pick a port
      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

      # Start the server in the background
      @thread = Thread.new do
        begin
          Thread.current.abort_on_exception = true
          @server.start
        ensure
          @port = nil
          @running = false
        end
      end

      # Do not return until the web server is genuinely started.
      while !@running && @thread.alive?
        sleep(0.01)
      end

      @thread
    end