← Back
Editing: 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'