code: def poll(self, timeout=-1, maxevents=-1):
          
          if self._epfd < 0:
              _err_closed()
          if timeout != -1:
              # 1000 because epoll_wait(2) uses milliseconds
              timeout = int(timeout * 1000)
          if maxevents == -1:
              maxevents = FD_SETSIZE - 1
          events = (epoll_event * maxevents)()
          num_events = epoll_wait(
              self._epfd, cast(byref(events), POINTER(epoll_event)),
              maxevents, timeout)
          return [(events[i].data.fd, events[i].events)
                  for i in range(num_events)]
docs: Poll for events
  
          :param timeout:
              The amount of seconds to wait for events before giving up. The
              default value, -1, represents infinity. Note that unlike the
              underlying ``epoll_wait()`` timeout is a fractional number
              representing **seconds**.
          :param maxevents:
              The maximum number of events to report. The default is a
              reasonably-sized maximum, identical to the one selected by
              Python 3.4.
          :returns:
              A list of (fd, events) that were reported or an empty list if the
              timeout elapsed.
          :raises ValueError:
              If :meth:`closed()` is True
          :raises OSError:
              If the underlying ``epoll_wait(2)`` fails. The error message
              matches those found in the manual page.