code: def __waituntil(self, stopwaiting, timeoutmsg):
          
          if not stopwaiting():
              if self.__timeout == 0:
                  # in non-blocking mode (immediate timeout)
                  # push event loop to really be sure there is no data available
                  _macutil.looponce()
                  if not stopwaiting():
                      # trying to perform operation now would block
                      raise _socket.error(errno.EAGAIN, os.strerror(errno.EAGAIN))
              else:
                  # block and wait until we get data, or time out
                  if not _macutil.waituntil(stopwaiting, self.__timeout):
                      raise _socket.timeout(timeoutmsg)
docs: Waits until stopwaiting() returns True, or until the wait times out
          (according to the self.__timeout value).
  
          This is to make a function wait until a buffer has been filled. i.e.
          stopwaiting() should return True when the buffer is no longer empty.