U
    lufF  ã                   @   sˆ   d Z zddlmZ W n  ek
r4   ddlmZ Y nX ddlZddlmZmZ ddl	m
Z
 ddl	mZ d	d
„ Zdd„ Zdd„ ZdgZdS )zzmq poll functioné    )Ú	monotonic)ÚclockN)ÚInterruptedSystemCallÚ	_check_rcé   )Úffi)Úlibc                 C   s0   | j }t d¡}||_d|_||_d|_|d S ©Nzzmq_pollitem_t*r   )Ú_zmq_socketr   ÚnewÚsocketÚfdÚeventsÚrevents)r   ÚflagsZ
zmq_socketÚzmq_pollitem© r   ú:/tmp/pip-unpacked-wheel-h6ekxre8/zmq/backend/cffi/_poll.pyÚ_make_zmq_pollitem   s    
r   c                 C   s,   t  d¡}t j|_| |_||_d|_|d S r	   )r   r   ÚNULLr   r   r   r   )Z	socket_fdr   r   r   r   r   Ú_make_zmq_pollitem_fromfd   s    
r   c                 C   s¨  g }i }ddl m} | D ]€}t|d |ƒrR|||d j< | t|d |d ƒ¡ qt|d tƒst|d  ¡ |d f}|||d < | t|d |d ƒ¡ qt	 
d|¡}t	 dt|ƒ¡}t	 d|¡}tƒ }	t |||¡}
zt|
ƒ W nb tk
rD   |dkr<tdtƒ |	  ƒ}|dk r.t d| t¡ d}td|| ƒ}Y q¶Y q¶X qLq¶g }|D ]N}|jdkrT|jt	jkrŽ| ||j d |jf¡ n| |j|jf¡ qT|S )	Nr   )ÚSocketr   zzmq_pollitem_t[]ÚintÚlongiè  zFNegative elapsed time for interrupted poll: %s.  Did the clock change?)Zzmqr   Ú
isinstancer
   Úappendr   r   Úfilenor   r   r   ÚcastÚlenr   ÚCÚzmq_pollr   r   ÚwarningsÚwarnÚRuntimeWarningÚmaxr   r   r   r   )ZsocketsÚtimeoutZcffi_pollitem_listZlow_level_to_socket_objr   ÚitemÚitemsZlist_lengthZ	c_timeoutÚstartÚrcZ	ms_passedÚresultr   r   r   r    &   sV    

ÿý
þÿr    )Ú__doc__Útimer   ÚImportErrorr   r!   Z	zmq.errorr   r   Z_cffir   r   r   r   r   r    Ú__all__r   r   r   r   Ú<module>   s   
	6