diff --git a/lib/http.py b/lib/http.py
index ab5349b3f99cd3da6d8171b7e0ab623ae6e7d287..699cb274ed635d56ad46f1b1a12321131f4504a6 100644
--- a/lib/http.py
+++ b/lib/http.py
@@ -160,6 +160,45 @@ class HTTPJsonConverter:
     return serializer.LoadJson(data)
 
 
+def WaitForSocketCondition(sock, poller, event, timeout):
+  """Waits for a condition to occur on the socket.
+
+  @type sock: socket
+  @param socket: Wait for events on this socket
+  @type poller: select.Poller
+  @param poller: Poller object as created by select.poll()
+  @type event: int
+  @param event: ORed condition (see select module)
+  @type timeout: float or None
+  @param timeout: Timeout in seconds
+  @rtype: int or None
+  @return: None for timeout, otherwise occured conditions
+
+  """
+  check = (event | select.POLLPRI |
+           select.POLLNVAL | select.POLLHUP | select.POLLERR)
+
+  if timeout is not None:
+    # Poller object expects milliseconds
+    timeout *= 1000
+
+  poller.register(sock, event)
+  try:
+    while True:
+      # TODO: If the main thread receives a signal and we have no timeout, we
+      # could wait forever. This should check a global "quit" flag or
+      # something every so often.
+      io_events = poller.poll(timeout)
+      if not io_events:
+        # Timeout
+        return None
+      for (evfd, evcond) in io_events:
+        if evcond & check:
+          return evcond
+  finally:
+    poller.unregister(sock)
+
+
 class HttpSslParams(object):
   """Data class for SSL key and certificate.
 
@@ -1006,41 +1045,6 @@ class HttpClientRequestExecutor(_HttpSocketBase):
 
     return buf
 
-  def _WaitForCondition(self, event, timeout):
-    """Waits for a condition to occur on the socket.
-
-    @type event: int
-    @param event: ORed condition (see select module)
-    @type timeout: float or None
-    @param timeout: Timeout in seconds
-    @rtype: int or None
-    @return: None for timeout, otherwise occured conditions
-
-    """
-    check = (event | select.POLLPRI |
-             select.POLLNVAL | select.POLLHUP | select.POLLERR)
-
-    if timeout is not None:
-      # Poller object expects milliseconds
-      timeout *= 1000
-
-    self.poller.register(self.sock, event)
-    try:
-      while True:
-        # TODO: If the main thread receives a signal and we have no timeout, we
-        # could wait forever. This should check a global "quit" flag or
-        # something every so often.
-        io_events = self.poller.poll(timeout)
-        if io_events:
-          for (evfd, evcond) in io_events:
-            if evcond & check:
-              return evcond
-        else:
-          # Timeout
-          return None
-    finally:
-      self.poller.unregister(self.sock)
-
   def _SocketOperation(self, op, arg1, error_msg, timeout_msg):
     """Wrapper around socket functions.
 
@@ -1084,7 +1088,8 @@ class HttpClientRequestExecutor(_HttpSocketBase):
         else:
           wait_for_event = event_poll
 
-        event = self._WaitForCondition(wait_for_event, timeout)
+        event = WaitForSocketCondition(self.sock, self.poller, wait_for_event,
+                                       timeout)
         if event is None:
           raise _HttpClientTimeout(timeout_msg)
 
@@ -1180,7 +1185,8 @@ class HttpClientRequestExecutor(_HttpSocketBase):
 
     if not connected:
       # Wait for connection
-      event = self._WaitForCondition(select.POLLOUT, self.CONNECT_TIMEOUT)
+      event = WaitForSocketCondition(self.sock, self.poller,
+                                     select.POLLOUT, self.CONNECT_TIMEOUT)
       if event is None:
         raise _HttpClientError("Timeout while connecting to server")