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.

def poll(self, timeout=-1, maxevents=-1):
        """
        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.
        """
        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)]