From 2ce931cb7a5a110f2fc7c97a0911b99f68bd966a Mon Sep 17 00:00:00 2001 From: mathieui Date: Tue, 21 Jul 2015 00:57:22 +0200 Subject: [PATCH] Add a waiting time before reconnecting automatically Punishing a server for being down by sending more traffic is not a nice thing to do. Taking 100% of the CPU is not nice either. --- slixmpp/xmlstream/xmlstream.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/slixmpp/xmlstream/xmlstream.py b/slixmpp/xmlstream/xmlstream.py index 866368bd..35d57869 100644 --- a/slixmpp/xmlstream/xmlstream.py +++ b/slixmpp/xmlstream/xmlstream.py @@ -72,6 +72,8 @@ class XMLStream(asyncio.BaseProtocol): # The socket the is used internally by the transport object self.socket = None + self.connect_loop_wait = 0 + self.parser = None self.xml_depth = 0 self.xml_root = None @@ -301,6 +303,7 @@ class XMLStream(asyncio.BaseProtocol): # and try (host, port) as a last resort self.dns_answers = None + yield from asyncio.sleep(self.connect_loop_wait) try: yield from self.loop.create_connection(lambda: self, self.address[0], @@ -312,7 +315,10 @@ class XMLStream(asyncio.BaseProtocol): except OSError as e: log.debug('Connection failed: %s', e) self.event("connection_failed", e) + self.connect_loop_wait = self.connect_loop_wait * 2 + 1 asyncio.async(self._connect_routine()) + else: + self.connect_loop_wait = 0 def process(self, *, forever=True, timeout=None): """Process all the available XMPP events (receiving or sending data on the