mirror of
https://github.com/Mikaela/Limnoria.git
synced 2025-02-18 22:51:01 +01:00
Added exponential (well, 0 -> 60 -> 300) reconnect backoff.
This commit is contained in:
parent
9600ada127
commit
1d77fa5354
@ -48,7 +48,7 @@ instances = 0
|
|||||||
originalPoll = conf.poll
|
originalPoll = conf.poll
|
||||||
|
|
||||||
class SocketDriver(drivers.IrcDriver):
|
class SocketDriver(drivers.IrcDriver):
|
||||||
def __init__(self, (server, port), irc):
|
def __init__(self, (server, port), irc, reconnectWaits=(0, 60, 300)):
|
||||||
global instances
|
global instances
|
||||||
instances += 1
|
instances += 1
|
||||||
conf.poll = originalPoll / instances
|
conf.poll = originalPoll / instances
|
||||||
@ -59,6 +59,8 @@ class SocketDriver(drivers.IrcDriver):
|
|||||||
self.inbuffer = ''
|
self.inbuffer = ''
|
||||||
self.outbuffer = ''
|
self.outbuffer = ''
|
||||||
self.connected = False
|
self.connected = False
|
||||||
|
self.reconnectWaitsIndex = 0
|
||||||
|
self.reconnectWaits = reconnectWaits
|
||||||
self.reconnect()
|
self.reconnect()
|
||||||
|
|
||||||
def _sendIfMsgs(self):
|
def _sendIfMsgs(self):
|
||||||
@ -94,25 +96,34 @@ class SocketDriver(drivers.IrcDriver):
|
|||||||
debug.recoverableException()
|
debug.recoverableException()
|
||||||
except socket.timeout:
|
except socket.timeout:
|
||||||
pass
|
pass
|
||||||
|
except socket.error, e:
|
||||||
|
s = 'Disconnect from %s: %s' % (self.server, e.args[1])
|
||||||
|
debug.msg(s, 'normal')
|
||||||
|
self.die()
|
||||||
|
return
|
||||||
self._sendIfMsgs()
|
self._sendIfMsgs()
|
||||||
|
|
||||||
def reconnect(self):
|
def reconnect(self):
|
||||||
#debug.methodNamePrintf(self, 'reconnect')
|
#debug.methodNamePrintf(self, 'reconnect')
|
||||||
self.conn = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
self.conn = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||||
self.conn.settimeout(conf.poll)
|
self.conn.settimeout(conf.poll)
|
||||||
|
if self.reconnectWaitsIndex < len(self.reconnectWaits)-1:
|
||||||
|
self.reconnectWaitsIndex += 1
|
||||||
try:
|
try:
|
||||||
self.conn.connect(self.server)
|
self.conn.connect(self.server)
|
||||||
|
self.connected = True
|
||||||
|
self.reconnectWaitPeriodsIndex = 0
|
||||||
except socket.error, e:
|
except socket.error, e:
|
||||||
debug.msg('Error connecting to %s: %s' % (self.server, e))
|
debug.msg('Error connecting to %s: %s' % (self.server, e))
|
||||||
self.die()
|
self.die()
|
||||||
self.connected = True
|
|
||||||
|
|
||||||
def die(self):
|
def die(self):
|
||||||
#debug.methodNamePrintf(self, 'die')
|
#debug.methodNamePrintf(self, 'die')
|
||||||
self.irc.reset()
|
self.irc.reset()
|
||||||
self.conn.close()
|
self.conn.close()
|
||||||
self.connected = False
|
self.connected = False
|
||||||
when = time.time() + 60
|
when = time.time() + self.reconnectWaits[self.reconnectWaitsIndex]
|
||||||
whenS = time.strftime(conf.logTimestampFormat, time.localtime(when))
|
whenS = time.strftime(conf.logTimestampFormat, time.localtime(when))
|
||||||
debug.msg('Scheduling reconnect to %s at %s' % (self.server, whenS),
|
debug.msg('Scheduling reconnect to %s at %s' % (self.server, whenS),
|
||||||
'normal')
|
'normal')
|
||||||
|
Loading…
x
Reference in New Issue
Block a user