ó
L]c           @   sž   d  Z  y d d l m Z Wn! e k
 r= d d l m Z n Xd d l Z d d l m Z m Z d d l	 m
 Z
 m Z d „  Z d	 „  Z d
 „  Z d g Z d S(   s   zmq poll functioniÿÿÿÿ(   t	   monotonic(   t   clockNi   (   t   Ct   ffi(   t   InterruptedSystemCallt	   _check_rcc         C   sD   |  j  } t j d ƒ } | | _ d | _ | | _ d | _ | d S(   Ns   zmq_pollitem_t*i    (   t   _zmq_socketR   t   newt   sockett   fdt   eventst   revents(   R   t   flagst
   zmq_sockett   zmq_pollitem(    (    s5   lib/python2.7/site-packages/zmq/backend/cffi/_poll.pyt   _make_zmq_pollitem   s    					c         C   s>   t  j d ƒ } t  j | _ |  | _ | | _ d | _ | d S(   Ns   zmq_pollitem_t*i    (   R   R   t   NULLR   R	   R
   R   (   t	   socket_fdR   R   (    (    s5   lib/python2.7/site-packages/zmq/backend/cffi/_poll.pyt   _make_zmq_pollitem_fromfd   s    			c         C   s]  g  } i  } d d l  m } x¯ |  D]§ } t | d | ƒ rn | | | d j <| j t | d | d ƒ ƒ q# t | d t ƒ sž | d j ƒ  | d f } n  | | | d <| j t | d | d ƒ ƒ q# Wt	 j
 d | ƒ } t	 j d t | ƒ ƒ } xÂ t r¼t	 j d | ƒ } t ƒ  }	 t j | | | ƒ }
 y t |
 ƒ Wnv t k
 r·| d k rû t d t ƒ  |	 ƒ } | d k  r›t j d	 | t ƒ d } n  t d | | ƒ } qû qû qû XPqû Wg  } x“ t t | ƒ ƒ D] } | | j d k rÖ| | j t	 j k s1| j | | | j d | | j f ƒ qU| j | | j | | j f ƒ qÖqÖW| S(
   Niÿÿÿÿ(   t   Socketi    i   s   zmq_pollitem_t[]t   intt   longiè  sF   Negative elapsed time for interrupted poll: %s.  Did the clock change?(   t   zmqR   t
   isinstanceR   t   appendR   R   t   filenoR   R   R   t   castt   lent   TrueR    R   t   zmq_pollR   R   t   warningst   warnt   RuntimeWarningt   maxt   rangeR   R   R   R	   (   t   socketst   timeoutt   cffi_pollitem_listt   low_level_to_socket_objR   t   itemt   itemst   list_lengtht	   c_timeoutt   startt   rct	   ms_passedt   resultt   index(    (    s5   lib/python2.7/site-packages/zmq/backend/cffi/_poll.pyR   !   sN    !"			(R   (   t   __doc__t   timeR    t   ImportErrorR   R   t   _cffiR   R   t	   zmq.errorR   R   R   R   R   t   __all__(    (    (    s5   lib/python2.7/site-packages/zmq/backend/cffi/_poll.pyt   <module>   s   				/