class_docstr: Replacement for :class:`zmq.Poller`
  
  Ensures that the greened Poller below is used in calls to
  :meth:`zmq.Poller.poll`.
docstr: Returns three elements tuple with socket descriptors ready
  for gevent.select.select
docstr_tok: ["Returns","three","elements","tuple","with","socket","descriptors","ready","for","gevent.select.select"]
code: def _get_descriptors(self):
      """Returns three elements tuple with socket descriptors ready
      for gevent.select.select
      """
      rlist = []
      wlist = []
      xlist = []
  
      for socket, flags in self.sockets:
          if isinstance(socket, zmq.Socket):
              rlist.append(socket.getsockopt(zmq.FD))
              continue
          elif isinstance(socket, int):
              fd = socket
          elif hasattr(socket, "fileno"):
              try:
                  fd = int(socket.fileno())
              except:
                  raise ValueError(
                      "fileno() must return an valid integer fd"
                  )
          else:
              raise TypeError(
                  "Socket must be a 0MQ socket, an integer fd "
                  "or have a fileno() method: %r" % socket
              )
  
          if flags & zmq.POLLIN:
              rlist.append(fd)
          if flags & zmq.POLLOUT:
              wlist.append(fd)
          if flags & zmq.POLLERR:
              xlist.append(fd)
  
      return (rlist, wlist, xlist)
  
imports: import zmq
  import gevent
  from gevent import select
  from zmq import Poller
label_desc: Use image node_id 1 for calling the _Poller obj's underlying member method code with example usage: obj._get_descriptors() and returns: rlist,  wlist,  xlist