From c80aab88f3572cd82a3d5ec7f3b8980c8af67966 Mon Sep 17 00:00:00 2001 From: jesopo Date: Mon, 2 Sep 2019 14:18:27 +0100 Subject: put socket timeout and deadline around mumble queries --- modules/mumble.py | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/modules/mumble.py b/modules/mumble.py index 877c735e..1da3aa55 100644 --- a/modules/mumble.py +++ b/modules/mumble.py @@ -20,13 +20,21 @@ class Module(ModuleManager.BaseModule): timestamp = datetime.datetime.utcnow().microsecond ping_packet = struct.pack(">iQ", 0, timestamp) s = socket.socket(type=socket.SOCK_DGRAM) + s.settimeout(5) - try: - s.sendto(ping_packet, (server, port)) - except socket.gaierror as e: - raise utils.EventError(str(e)) + with utils.deadline(): + try: + s.sendto(ping_packet, (server, port)) + except socket.gaierror as e: + raise utils.EventError(str(e)) + + try: + pong_packet = s.recv(24) + except socket.timeout: + raise utils.EventError( + "Timed out waiting for response from %s:%d" + % (server, port)) - pong_packet = s.recv(24) pong = struct.unpack(">bbbbQiii", pong_packet) version = ".".join(str(v) for v in pong[1:4]) -- cgit v1.3.1-10-gc9f91