'Do a request, and retry once (with a new connection) if it fails in
a retryable manner.
@param request: A L{Request} instance that will be requested using the
wrapped protocol.'

def request(self, request):

    d = self._clientProtocol.request(request)
    def failed(reason):
        if self._shouldRetry(request.method, reason.value, request.bodyProducer):
            return self._newConnection().addCallback((lambda connection: connection.request(request)))
        else:
            return reason
    d.addErrback(failed)
    return d
