From c974f4fdc062fb57f31734b6c9dcbc202a6b9d22 Mon Sep 17 00:00:00 2001 From: David Hoese <david.hoese@ssec.wisc.edu> Date: Tue, 2 Jul 2024 13:55:06 -0500 Subject: [PATCH] Set socket timeout on loggernet receiver --- metobscommon/archive/loggernet_receiver.py | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/metobscommon/archive/loggernet_receiver.py b/metobscommon/archive/loggernet_receiver.py index f52b8f1..a589eba 100644 --- a/metobscommon/archive/loggernet_receiver.py +++ b/metobscommon/archive/loggernet_receiver.py @@ -19,14 +19,24 @@ LOG = logging.getLogger(__name__) def _ldmp_worker(host, port, queue, run_event): s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((host, port)) + s.settimeout(30.0) data_str = "" while run_event.is_set(): # Get the data from the LDMP server while not data_str or data_str[-1] != '\n': - data = s.recv(2048) + try: + data = s.recv(2048) + except TimeoutError: + LOG.info("Timeout error (30 seconds) from LDMP socket") + if not run_event.is_set(): + LOG.debug("Signal to stop background process seen during receive timeout") + break data_str += data.decode('utf8') + if not run_event.is_set(): + continue + # Acknowledge that we received the record s.send(b'\r') @@ -63,9 +73,10 @@ class LDMPReceiver(object): if not self._started: return self._run_event.clear() + LOG.info("Background process told to stop") self._worker.join() self._started = False - LOG.info("Background thread successfully terminated") + LOG.info("Background process successfully terminated") def close(self): return self.stop() @@ -80,7 +91,7 @@ class LDMPReceiver(object): def __iter__(self): try: while True: - yield self._queue.get(timeout=600) # 5 minutes + yield self._queue.get(timeout=300) # 5 minutes except KeyboardInterrupt: LOG.info("Keyboard interrupt encountered, killing background " "thread...") -- GitLab