def METHOD_NAME(self, seconds=None):
    readers = self.listeners[self.READ]
    writers = self.listeners[self.WRITE]
    if not readers and not writers:
        if seconds:
            time.sleep(seconds)
        return
    try:
        presult = self.do_poll(seconds)
    except (IOError, select.error) as e:
        if support.get_errno(e) == errno.EINTR:
            return
        raise
    SYSTEM_EXCEPTIONS = self.SYSTEM_EXCEPTIONS
    if self.debug_blocking:
        self.block_detect_pre()
    # Accumulate the listeners to call back to prior to
    # triggering any of them. This is to keep the set
    # of callbacks in sync with the events we've just
    # polled for. It prevents one handler from invalidating
    # another.
    callbacks = set()
    noop = hub.noop  # shave getattr
    for fileno, event in presult:
        if event & self.READ_MASK:
            callbacks.add((readers.get(fileno, noop), fileno))
        if event & self.WRITE_MASK:
            callbacks.add((writers.get(fileno, noop), fileno))
        if event & select.POLLNVAL:
            self.remove_descriptor(fileno)
            continue
        if event & self.EXC_MASK:
            callbacks.add((readers.get(fileno, noop), fileno))
            callbacks.add((writers.get(fileno, noop), fileno))
    for listener, fileno in callbacks:
        try:
            listener.cb(fileno)
        except SYSTEM_EXCEPTIONS:
            raise
        except:
            self.squelch_exception(fileno, sys.exc_info())
            support.clear_sys_exc_info()
    if self.debug_blocking:
        self.block_detect_post()