This function allows receiving socket data synchronously.

Signed-off-by: Guido Trotter <ultrot...@google.com>
---
 lib/daemon.py |   16 ++++++++++++++++
 1 files changed, 16 insertions(+), 0 deletions(-)

diff --git a/lib/daemon.py b/lib/daemon.py
index 6eca3a3..75bccf9 100644
--- a/lib/daemon.py
+++ b/lib/daemon.py
@@ -30,6 +30,7 @@ import logging
 import sched
 import time
 import socket
+import select
 import sys
 
 from ganeti import utils
@@ -156,6 +157,21 @@ class AsyncUDPSocket(asyncore.dispatcher):
                                     constants.MAX_UDP_DATA_SIZE))
     self._out_queue.append((ip, port, payload))
 
+  def process_next_packet(self, timeout=0):
+    """Process the next datagram, waiting for it if necessary.
+
+    @type timeout: float
+    @param timeout: how long to wait for data
+    @rtype: boolean
+    @return: True if some data has been handled, False otherwise
+
+    """
+    if utils.WaitForFDCondition(self, select.POLLIN, timeout):
+      self.do_read()
+      return True
+    else:
+      return False
+
 
 class Mainloop(object):
   """Generic mainloop for daemons
-- 
1.7.0

Reply via email to