HEX
Server: Apache
System: Linux scp1.abinfocom.com 5.4.0-216-generic #236-Ubuntu SMP Fri Apr 11 19:53:21 UTC 2025 x86_64
User: confeduphaar (1010)
PHP: 8.1.33
Disabled: exec,passthru,shell_exec,system
Upload Files
File: //usr/lib/python3/dist-packages/twisted/internet/__pycache__/epollreactor.cpython-38.pyc
U


W[-!�@s�dZddlmZmZddlmZmZmZmZm	Z	ddl
Z
ddlmZddl
mZddlmZddlmZee�Gd	d
�d
ejej��Zdd�Zd
dgZdS)
z�
An epoll() based implementation of the twisted main loop.

To install the event loop (and you should do this before any connections,
listeners or connectors are added)::

    from twisted.internet import epollreactor
    epollreactor.install()
�)�division�absolute_import)�epoll�EPOLLHUP�EPOLLERR�EPOLLIN�EPOLLOUTN)�implementer)�
IReactorFDSet)�log)�	posixbasec@s|eZdZdZeeBZeZe	Z
dd�Zdd�Zdd�Z
dd	�Zd
d�Zdd
�Zdd�Zdd�Zdd�Zdd�Zdd�ZeZdS)�EPollReactora�
    A reactor that uses epoll(7).

    @ivar _poller: A C{epoll} which will be used to check for I/O
        readiness.

    @ivar _selectables: A dictionary mapping integer file descriptors to
        instances of C{FileDescriptor} which have been registered with the
        reactor.  All C{FileDescriptors} which are currently receiving read or
        write readiness notifications will be present as values in this
        dictionary.

    @ivar _reads: A set containing integer file descriptors.  Values in this
        set will be registered with C{_poller} for read readiness notifications
        which will be dispatched to the corresponding C{FileDescriptor}
        instances in C{_selectables}.

    @ivar _writes: A set containing integer file descriptors.  Values in this
        set will be registered with C{_poller} for write readiness
        notifications which will be dispatched to the corresponding
        C{FileDescriptor} instances in C{_selectables}.

    @ivar _continuousPolling: A L{_ContinuousPolling} instance, used to handle
        file descriptors (e.g. filesystem files) that are not supported by
        C{epoll(7)}.
    cCs<td�|_t�|_t�|_i|_t�|�|_tj	�
|�dS)zm
        Initialize epoll object, file descriptor tracking dictionaries, and the
        base class.
        iN)r�_poller�set�_reads�_writes�_selectablesrZ_ContinuousPolling�_continuousPolling�PosixReactorBase�__init__��self�r�?/usr/lib/python3/dist-packages/twisted/internet/epollreactor.pyr=s
zEPollReactor.__init__c	CsX|��}||krT|}||kr4||O}|j�||�n|j�||�|�|�|||<dS)z�
        Private method for adding a descriptor from the event loop.

        It takes care of adding it if  new or modifying it if already added
        for another state (read -> read/write for example).
        N)�filenor�modify�register�add)	r�xer�primary�other�selectables�event�	antievent�fd�flagsrrr�_addMs
zEPollReactor._addc
Csbz|�||j|j|jtt�Wn>tk
r\}z |jtjkrJ|j	�
|�n�W5d}~XYnXdS)zR
        Add a FileDescriptor for notification of data available to read.
        N)r&rrrrr�IOError�errno�EPERMr�	addReader)r�reader�errrr*hs�zEPollReactor.addReaderc
Csbz|�||j|j|jtt�Wn>tk
r\}z |jtjkrJ|j	�
|�n�W5d}~XYnXdS)zS
        Add a FileDescriptor for notification of data available to write.
        N)r&rrrrrr'r(r)r�	addWriter)r�writerr,rrrr-ys�zEPollReactor.addWriterc
Csv|��}|dkr2|��D]\}}||krq2qdS||krr||krV|}	|j�||	�n||=|j�|�|�|�dS)z�
        Private method for removing a descriptor from the event loop.

        It does the inverse job of _add, and also add a check in case of the fd
        has gone away.
        ���N)r�itemsrrZ
unregister�remove)
rrrr r!r"r#r$Zfdesr%rrr�_remove�szEPollReactor._removecCs:|j�|�r|j�|�dS|�||j|j|jtt�dS)zQ
        Remove a Selectable for notification of data available to read.
        N)	rZ	isReading�removeReaderr2rrrrr)rr+rrrr3�s�zEPollReactor.removeReadercCs:|j�|�r|j�|�dS|�||j|j|jtt�dS)zR
        Remove a Selectable for notification of data available to write.
        N)	rZ	isWriting�removeWriterr2rrrrr)rr.rrrr4�s�zEPollReactor.removeWritercs6���fdd��jD��fdd��jD���j��S)zD
        Remove all selectables, and return a list of them.
        csg|]}�j|�qSr�r��.0r$rrr�
<listcomp>�sz*EPollReactor.removeAll.<locals>.<listcomp>csg|]}�j|�qSrr5r6rrrr8�s)Z
_removeAllrrr�	removeAllrrrrr9�s��zEPollReactor.removeAllcs�fdd��jD��j��S)Ncsg|]}�j|�qSrr5r6rrrr8�sz+EPollReactor.getReaders.<locals>.<listcomp>)rr�
getReadersrrrrr:�s�zEPollReactor.getReaderscs�fdd��jD��j��S)Ncsg|]}�j|�qSrr5r6rrrr8�sz+EPollReactor.getWriters.<locals>.<listcomp>)rr�
getWritersrrrrr;�s�zEPollReactor.getWritersc
Cs�|dkrd}z|j�|t|j��}Wn:tk
r^}z|jtjkrLWY�
dS�W5d}~XYnX|j}|D]>\}}z|j|}Wntk
r�YqjXt	�
|||||�qjdS)z1
        Poll the poller for new events.
        Nr/)rZpoll�lenrr'r(ZEINTRZ_doReadOrWrite�KeyErrorrZcallWithLogger)rZtimeout�l�errZ_drdwr$r"Z
selectablerrr�doPoll�s
zEPollReactor.doPollN)�__name__�
__module__�__qualname__�__doc__rrZ_POLL_DISCONNECTEDrZ_POLL_INrZ	_POLL_OUTrr&r*r-r2r3r4r9r:r;r@ZdoIterationrrrrr
s 
r
cCst�}ddlm}||�dS)z&
    Install the epoll() reactor.
    r)�installReactorN)r
Ztwisted.internet.mainrE)�prErrr�install�srG)rDZ
__future__rrZselectrrrrrr(Zzope.interfacer	Ztwisted.internet.interfacesr
Ztwisted.pythonrZtwisted.internetrrZ_PollLikeMixinr
rG�__all__rrrr�<module>s
U