3
Z_ð]  ã               @   s”   d dl Z d dlZd dlmZmZ d dlmZ ejdƒZejdƒZ	ye
e je jfƒZW n  ek
rt   e
e jfƒZY nX dd„ ZG dd	„ d	ejƒZdS )
é    N)ÚpatcherÚsupport)ÚhubÚselectÚtimec               C   s
   t tdƒS )Nr   )Úhasattrr   © r   r   ú9/tmp/pip-build-yz_zf6az/eventlet/eventlet/hubs/selects.pyÚis_available   s    r
   c               @   s   e Zd Zdd„ Zddd„ZdS )ÚHubc             C   s†   t | j| j ƒt | j| j ƒ }x`|D ]X}ytj|gg g dƒ W q& tjk
r| } ztj|ƒtkrl| j	|ƒ W Y dd}~X q&X q&W dS )z_ Iterate through fds, removing the ones that are bad per the
        operating system.
        r   N)
ÚlistÚ	listenersÚREADÚWRITEr   Úerrorr   Ú	get_errnoÚBAD_SOCKZremove_descriptor)ÚselfÚall_fdsÚfdÚer   r   r	   Ú_remove_bad_fds   s     
zHub._remove_bad_fdsNc             C   s~  | j | j }| j | j }| r6| r6|r2tj|ƒ d S t|ƒ}t|ƒ}|| }ytj||||ƒ\}}}	W nT tjk
r¼ }
 z6tj	|
ƒt
jkr�d S tj	|
ƒtkrª| jƒ  d S ‚ W Y d d }
~
X nX x4|	D ],}|j|tjƒj|ƒ |j|tjƒj|ƒ qÄW x„||f||ffD ]p\}}xd|D ]\}y|j|tjƒj|ƒ W n< | jk
�rJ   ‚ Y n$   | j|tjƒ ƒ tjƒ  Y nX �qW �qW d S )N)r   r   r   r   Úsleepr   r   r   r   r   ÚerrnoZEINTRr   r   Úgetr   ZnoopÚcbZSYSTEM_EXCEPTIONSZsquelch_exceptionÚsysÚexc_infoZclear_sys_exc_info)r   ÚsecondsZreadersZwritersZ
reader_fdsZ
writer_fdsr   ÚrÚwZerr   Úfilenor   Úeventsr   r   r	   Úwait   s<    


zHub.wait)N)Ú__name__Ú
__module__Ú__qualname__r   r#   r   r   r   r	   r      s   r   )r   r   Zeventletr   r   Zeventlet.hubsr   Úoriginalr   r   ÚsetÚEBADFZWSAENOTSOCKr   ÚAttributeErrorr
   ZBaseHubr   r   r   r   r	   Ú<module>   s   

