diff --git a/lib/daemon.py b/lib/daemon.py
index d4989f7dd6091be1578251e19c3fa2378650a1bf..7ed845f65134975b700baf8bc8eaf311f458eda4 100644
--- a/lib/daemon.py
+++ b/lib/daemon.py
@@ -112,10 +112,12 @@ class AsyncUDPSocket(GanetiBaseAsyncoreDispatcher):
 
   # this method is overriding an asyncore.dispatcher method
   def handle_read(self):
-    payload, address = utils.IgnoreSignals(self.recvfrom,
-                                           constants.MAX_UDP_DATA_SIZE)
-    ip, port = address
-    self.handle_datagram(payload, ip, port)
+    recv_result = utils.IgnoreSignals(self.recvfrom,
+                                      constants.MAX_UDP_DATA_SIZE)
+    if recv_result is not None:
+      payload, address = recv_result
+      ip, port = address
+      self.handle_datagram(payload, ip, port)
 
   def handle_datagram(self, payload, ip, port):
     """Handle an already read udp datagram
diff --git a/test/ganeti.daemon_unittest.py b/test/ganeti.daemon_unittest.py
index 81912ee181af412eb3288b09010dc6191fd4c2b1..d00c89725ca2fba2697f1b5d543ff1f75231d466 100755
--- a/test/ganeti.daemon_unittest.py
+++ b/test/ganeti.daemon_unittest.py
@@ -28,6 +28,7 @@ import socket
 import time
 
 from ganeti import daemon
+from ganeti import utils
 
 import testutils
 
@@ -170,10 +171,14 @@ class TestAsyncUDPSocket(testutils.GanetiTestCase):
     self.client = _MyAsyncUDPSocket()
     self.server.bind(("127.0.0.1", 0))
     self.port = self.server.getsockname()[1]
+    # Save utils.IgnoreSignals so we can do evil things to it...
+    self.saved_utils_ignoresignals = utils.IgnoreSignals
 
   def tearDown(self):
     self.server.close()
     self.client.close()
+    # ...and restore it as well
+    utils.IgnoreSignals = self.saved_utils_ignoresignals
     testutils.GanetiTestCase.tearDown(self)
 
   def testNoDoubleBind(self):
@@ -219,6 +224,17 @@ class TestAsyncUDPSocket(testutils.GanetiTestCase):
                       ["p1", "p2", "error", "p3", "error", "terminate"])
     self.assertEquals(self.server.error_count, 2)
 
+  def testSignaledWhileReceiving(self):
+    utils.IgnoreSignals = lambda fn, *args, **kwargs: None
+    self.client.enqueue_send("127.0.0.1", self.port, "p1")
+    self.client.enqueue_send("127.0.0.1", self.port, "p2")
+    self.server.handle_read()
+    self.assertEquals(self.server.received, [])
+    self.client.enqueue_send("127.0.0.1", self.port, "terminate")
+    utils.IgnoreSignals = self.saved_utils_ignoresignals
+    self.mainloop.Run()
+    self.assertEquals(self.server.received, ["p1", "p2", "terminate"])
+
 
 if __name__ == "__main__":
   testutils.GanetiTestProgram()