reopen UDP socket periodically

This commit is contained in:
Andreas Wrede
2016-07-11 15:54:52 -04:00
parent c8a5948353
commit d3c266de90
+18 -6
View File
@@ -22,6 +22,7 @@ import syslog
PORT = 50003
INTERVAL = 10
REOPENC = 6
PIDFILE = '/tmp/hbc.pid'
VER = 4
MAXRECV = 32767
@@ -54,13 +55,22 @@ class Conn:
self.send = 0
self.lastsend = 0 # time() last msg was sent
self.rtts = [0]
self.sock=socket.socket(af, socket.SOCK_DGRAM)
self.sock = None
def open(self):
self.sock=socket.socket(self.af, socket.SOCK_DGRAM)
self.sock.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR, \
self.sock.getsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR) | 1)
def sendto(self, msg, ID = 'HTB'): # default ID is HearTBeat
global warned1
if self.send % REOPENC == 0:
self.close()
if not self.sock:
self.open()
msg['name'] = shortname(iam)
msg['id'] = self.conId
msg['ver'] = VER
@@ -73,6 +83,7 @@ class Conn:
except socket.error as e:
if not warned1: log("socket error: %s %s:%s" % (e, self.addr, self.port))
warned1 = True
self.close()
return
self.send += 1
self.lastsend = time.time()
@@ -252,15 +263,16 @@ def restart():
def process():
global running, dorestart
ifiles = {}
conIds = {}
for conn in conns:
ifiles[conns[conn].sock.fileno()] = conns[conn].sock
conIds[conns[conn].sock.fileno()] = conn
nextReport = time.time()
while running:
while time.time() < nextReport:
ifiles = {}
conIds = {}
for conn in conns:
ifiles[conns[conn].sock.fileno()] = conns[conn].sock
conIds[conns[conn].sock.fileno()] = conn
sleep=nextReport - time.time()
if sleep <= 0:
break