a
    ވa                     @   s~   d Z zddlmZ W n ey2   ddlmZ Y n0 ddlZddlmZm	Z	 ddl
mZmZ dd	 Zd
d Zdd ZdgZdS )zzmq poll function    )	monotonic)clockN   )libffi)InterruptedSystemCall	_check_rcc                 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   5lib/python3.9/site-packages/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 n` tyB   |dkr:tdt |	  }|dk r,td| t d}td|| }Y qY q0 qJqg }tt|D ]f}|| jdkrZ|| jt	jks|||| j d || jf n||| j|| jf qZ|S )	Nr   )Socketr   zzmq_pollitem_t[]intZ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maxranger   r   r   r   )ZsocketsZtimeoutZcffi_pollitem_listZlow_level_to_socket_objr   itemitemsZlist_lengthZ	c_timeoutstartZrcZ	ms_passedresultindexr   r   r   r   $   sV    


r   )__doc__timer   ImportErrorr   r    Z_cffir   r   r   Z	zmq.errorr   r   r   r   r   __all__r   r   r   r   <module>   s   
	6