summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormartinko2012-12-11 21:55:17 +0000
committermartinko2012-12-11 21:55:17 +0000
commit0d75ab176822ea109754549fae1a9ebabd9c522d (patch)
tree5185261602eac4a199e2c9ec242d1d793ae8df2d
parenta5fccf33029c7e7645741c7933abf667e0bfcd4f (diff)
skytools.skylog: recreate udp socket periodically to work around icmp issue
"When skylog destination host goes down it doesn't create a new socket when ICMP error message is received." [Jira: DRB-1774]
-rw-r--r--python/skytools/skylog.py7
1 files changed, 7 insertions, 0 deletions
diff --git a/python/skytools/skylog.py b/python/skytools/skylog.py
index 11940ec1..c2a6d586 100644
--- a/python/skytools/skylog.py
+++ b/python/skytools/skylog.py
@@ -239,6 +239,8 @@ class SysLogHandler(logging.handlers.SysLogHandler):
# be compatible with both 2.6 and 2.7
socktype = socket.SOCK_DGRAM
+ _udp_reset = 0
+
def emit(self, record):
"""
Emit a record.
@@ -268,6 +270,11 @@ class SysLogHandler(logging.handlers.SysLogHandler):
self._connect_unixsocket(self.address)
self.socket.send(msg)
elif self.socktype == socket.SOCK_DGRAM:
+ now = time.time()
+ if now - 1 > self._udp_reset:
+ self.socket.close()
+ self.socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
+ self._udp_reset = now
self.socket.sendto(msg, self.address)
else:
self.socket.sendall(msg)