diff options
author | martinko | 2012-12-11 21:55:17 +0000 |
---|---|---|
committer | martinko | 2012-12-11 21:55:17 +0000 |
commit | 0d75ab176822ea109754549fae1a9ebabd9c522d (patch) | |
tree | 5185261602eac4a199e2c9ec242d1d793ae8df2d | |
parent | a5fccf33029c7e7645741c7933abf667e0bfcd4f (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.py | 7 |
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) |