class Puma::Server

def run(background=true)


are handled synchronously.
up in the background to handle requests. Otherwise requests
If +background+ is true (the default) then a thread is spun

Runs the server.
def run(background=true)
  BasicSocket.do_not_reverse_lookup = true
  @events.fire :state, :booting
  @status = :run
  if @mode == :tcp
    return run_lopez_mode(background)
  end
  queue_requests = @queue_requests
  @thread_pool = ThreadPool.new(@min_threads,
                                @max_threads,
                                IOBuffer) do |client, buffer|
    # Advertise this server into the thread
    Thread.current[ThreadLocalKey] = self
    process_now = false
    begin
      if queue_requests
        process_now = client.eagerly_finish
      else
        client.finish
        process_now = true
      end
    rescue MiniSSL::SSLError => e
      ssl_socket = client.io
      addr = ssl_socket.peeraddr.last
      cert = ssl_socket.peercert
      client.close
      @events.ssl_error self, addr, cert, e
    rescue HttpParserError => e
      client.write_error(400)
      client.close
      @events.parse_error self, client.env, e
    rescue ConnectionError, EOFError
      client.close
    else
      if process_now
        process_client client, buffer
      else
        client.set_timeout @first_data_timeout
        @reactor.add client
      end
    end
  end
  @thread_pool.clean_thread_locals = @options[:clean_thread_locals]
  if queue_requests
    @reactor = Reactor.new self, @thread_pool
    @reactor.run_in_thread
  end
  if @reaping_time
    @thread_pool.auto_reap!(@reaping_time)
  end
  if @auto_trim_time
    @thread_pool.auto_trim!(@auto_trim_time)
  end
  @events.fire :state, :running
  if background
    @thread = Thread.new do
      Puma.set_thread_name "server"
      handle_servers
    end
    return @thread
  else
    handle_servers
  end
end