diff --git a/metobscommon/archive/loggernet_receiver.py b/metobscommon/archive/loggernet_receiver.py
index f52b8f17b3cd622e28fcb62c3cd47f81233d089c..a589ebaa559653cf363ab6ed82f3e5adb7e79fb5 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...")