'poll the socket for events
returns a Future for the poll results.'

def poll(self, timeout=None, flags=_zmq.POLLIN):

    if self.closed:
        raise _zmq.ZMQError(_zmq.ENOTSUP)
    p = self._poller_class()
    p.register(self, flags)
    f = p.poll(timeout)
    future = self._Future()
    def unwrap_result(f):
        if future.done():
            return
        if f.exception():
            future.set_exception(f.exception())
        else:
            evts = dict(f.result())
            future.set_result(evts.get(self, 0))
    f.add_done_callback(unwrap_result)
    return future
