From 2247e86ff1124af1fed91ef4b4c565570be24427 Mon Sep 17 00:00:00 2001 From: Peter Hinch Date: Sat, 30 Jul 2022 18:39:11 +0100 Subject: [PATCH] ntptime.py: Error trapping as suggested by @Hamsanger. --- ntptime/ntptime.py | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/ntptime/ntptime.py b/ntptime/ntptime.py index 55d8ac9..cc7114a 100644 --- a/ntptime/ntptime.py +++ b/ntptime/ntptime.py @@ -21,15 +21,21 @@ host = "pool.ntp.org" def time(hrs_offset=0): # Local time offset in hrs relative to UTC NTP_QUERY = bytearray(48) NTP_QUERY[0] = 0x1B - addr = socket.getaddrinfo(host, 123)[0][-1] + try: + addr = socket.getaddrinfo(host, 123)[0][-1] + except OSError: + return 0 s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) poller = select.poll() poller.register(s, select.POLLIN) - s.sendto(NTP_QUERY, addr) - if poller.poll(1000): # time in milliseconds - msg = s.recv(48) + try: + s.sendto(NTP_QUERY, addr) + if poller.poll(1000): # time in milliseconds + msg = s.recv(48) + val = struct.unpack("!I", msg[40:44])[0] # Can return 0 + return max(val - NTP_DELTA + hrs_offset * 3600, 0) + except OSError: + pass # LAN error + finally: s.close() - val = struct.unpack("!I", msg[40:44])[0] - return val - NTP_DELTA + hrs_offset * 3600 - s.close() # Timeout occurred - return 0 + return 0 # Timeout or LAN error occurred