# File lib/thin/connection.rb, line 63
    def pre_process
      # Add client info to the request env
      @request.remote_address = remote_address

      # Connection may be closed unless the App#call response was a [-1, ...]
      # It should be noted that connection objects will linger until this
      # callback is no longer referenced, so be tidy!
      @request.async_callback = method(:post_process)

      if @backend.ssl?
        @request.env["rack.url_scheme"] = "https"

        if cert = get_peer_cert
          @request.env['rack.peer_cert'] = cert
        end
      end

      # When we're under a non-async framework like rails, we can still spawn
      # off async responses using the callback info, so there's little point
      # in removing this.
      response = AsyncResponse
      catch(:async) do
        # Process the request calling the Rack adapter
        response = @app.call(@request.env)
      end
      response
    rescue Exception => e
      unexpected_error(e)
      # Pass through error response
      can_persist? && @request.persistent? ? Response::PERSISTENT_ERROR : Response::ERROR
    end