class HTTP::Retriable::Performer

def perform(client, req, &block)

Other tags:
    Api: - private

Other tags:
    See: #initialize -
def perform(client, req, &block)
  1.upto(Float::INFINITY) do |attempt| # infinite loop with index
    err, res = try_request(&block)
    if retry_request?(req, err, res, attempt)
      begin
        wait_for_retry_or_raise(req, err, res, attempt)
      ensure
        # Some servers support Keep-Alive on any response. Thus we should
        # flush response before retry, to avoid state error (when socket
        # has pending response data and we try to write new request).
        # Alternatively, as we don't need response body here at all, we
        # are going to close client, effectivle closing underlying socket
        # and resetting client's state.
        client.close
      end
    elsif err
      client.close
      raise err
    elsif res
      return res
    end
  end
end