From: Cameron Dale Date: Wed, 23 Apr 2008 03:16:21 +0000 (-0700) Subject: Trap KRPC errors in writing to the transport and wait for timeout instead. X-Git-Url: https://git.mxchange.org/?p=quix0rs-apt-p2p.git;a=commitdiff_plain;h=572470e2055e28356365baffd0a62e86fb989f09 Trap KRPC errors in writing to the transport and wait for timeout instead. --- diff --git a/apt_p2p_Khashmir/krpc.py b/apt_p2p_Khashmir/krpc.py index 9ae5ac7..3a2e5b3 100644 --- a/apt_p2p_Khashmir/krpc.py +++ b/apt_p2p_Khashmir/krpc.py @@ -240,13 +240,16 @@ class KrpcRequest(defer.Deferred): self.delay = self.config.get('KRPC_INITIAL_DELAY', 2) self.start = datetime.now() self.later = None - self.send() + reactor.callLater(0, self.send) def send(self): """Send the request to the remote node.""" assert not self.later, 'There is already a pending request' self.later = reactor.callLater(self.delay, self.timeOut) - self.protocol.sendData(self.method, self.data) + try: + self.protocol.sendData(self.method, self.data) + except: + log.err() def timeOut(self): """Check for a unrecoverable timeout, otherwise resend.""" @@ -261,7 +264,7 @@ class KrpcRequest(defer.Deferred): else: self.delay *= 2 log.msg('Trying to resend %r now with delay %d sec' % (self.tid, self.delay)) - self.send() + reactor.callLater(0, self.send) def callback(self, resp): self.dropTimeOut() @@ -535,11 +538,10 @@ class KRPC: @type data: C{string} @param data: the message to send to the remote node """ + self.transport.write(data, self.addr) self.stats.sentAction(method) self.stats.sentBytes(len(data)) - self.transport.write(data, self.addr) - def timeOut(self, badTID, method): """Call the deferred's errback if a timeout occurs.