File: //lib/python3/dist-packages/twisted/internet/__pycache__/selectreactor.cpython-38.pyc
U
��W[G � @ s� d Z ddlmZmZ ddlmZ ddlZddlZddlZddl m
Z
mZ ddlm
Z
ddlmZ ddlmZ dd lmZ dd
lmZ ddd�Zed
kr�eZnejZzddlmZ W n ek
r� eZY nX eZe
e�G dd� deje��Zdd� ZdgZ dS )z
Select reactor
� )�division�absolute_import)�sleepN)�EINTR�EBADF)�implementer)�
IReactorFDSet)� posixbase)�log)�platformTypec C sj | s2|s2|dkrd}n
t |d�}t|� g g g fS |dksB|dkrFd}t�| |||�\} }}| || g fS )zWin32 select wrapper.Ng{�G�z�?g����MbP?g �?)�minr �select)�r�w�e�timeout� r �@/usr/lib/python3/dist-packages/twisted/internet/selectreactor.py�win32select s
r Zwin32)�_ThreadedWin32EventsMixinc @ sl e Zd ZdZdd� Zdd� Zdd� ZeZdd � Zd
d� Z dd
� Z
dd� Zdd� Zdd� Z
dd� Zdd� ZdS )�
SelectReactora-
A select() based reactor - runs on all POSIX platforms and on Win32.
@ivar _reads: A set containing L{FileDescriptor} instances which will be
checked for read events.
@ivar _writes: A set containing L{FileDescriptor} instances which will be
checked for writability.
c C s t � | _t � | _tj�| � dS )zV
Initialize file descriptor tracking dictionaries and the base class.
N)�set�_reads�_writesr �PosixReactorBase�__init__��selfr r r r B s zSelectReactor.__init__c C s� t �d� t| j�}t| j�}| j�� | j�� | j|f| j|ffD ]v\}}|D ]h}zt�|g|g|gd� W n> tk
r� } z t �d| � | �||d� W 5 d }~X Y qRX |� |� qRqFd S )Nz1Malformed file descriptor found. Preening lists.r zbad descriptor %sF)
r
�msg�listr r �clearr
� Exception�_disconnectSelectable�add)r ZreadersZwritersZselSetZselList�
selectabler r r r �_preenDescriptorsK s
� zSelectReactor._preenDescriptorsc
C sJ zt | j| jg |�\}}}W n� tk
r: | �� Y dS tk
r^ t�� | �� Y dS tj t
j tfk
r� } zf|jd dkr�| js�| js�W Y �FdS � n:|jd t
kr�W Y �*dS |jd tkr�| �� W Y �
dS � W 5 d}~X Y nX | j}tj}|d| jf|d| jffD ]4\}} }
|D ]"}||
k�r0�q||||| � �q�qdS )z�
Run one iteration of the I/O monitor loop.
This will run all selectables who had input or output readiness
waiting for them.
Nr )r � �doReadZdoWrite)�_selectr r �
ValueErrorr% � TypeErrorr
�errr
�error�socket�IOError�argsr r �_doReadOrWriteZcallWithLogger)r r r r ZignoredZseZ_drdwZ_logrunZselectables�methodZfdsetr$ r r r �doSelect] sB �
�
zSelectReactor.doSelectc C sL zt ||�� }W n t�� d }t�� Y nX |rH| �|||dk� d S )N� r'