§
    Ètºfí"  ã                   óX  — d Z ddlZddlZddlmZ ddlmZ ddlmZ ddl	m
Z
 	  eed¦  «        Z eed¦  «        Z eed	¦  «        Z eed
¦  «        Z eed¦  «        Zn# e$ rZ ee¦  «        ‚dZ[ww xY w ee¦  «         G d„ dej        ej        ¦  «        ¦   «         Zd„ ZddgZdS )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()
é    N)Úimplementer)Ú	posixbase)ÚIReactorFDSet)ÚlogÚepollÚEPOLLHUPÚEPOLLERRÚEPOLLINÚEPOLLOUTc                   ój   — e Zd ZdZeez  ZeZe	Z
d„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd	„ Zd
„ Zd„ Zd„ ZeZdS )Ú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)}.
    c                 óø   — t          d¦  «        | _        t          ¦   «         | _        t          ¦   «         | _        i | _        t          j        | ¦  «        | _        t          j	         
                    | ¦  «         dS )zm
        Initialize epoll object, file descriptor tracking dictionaries, and the
        base class.
        i   N)r   Ú_pollerÚsetÚ_readsÚ_writesÚ_selectablesr   Ú_ContinuousPollingÚ_continuousPollingÚPosixReactorBaseÚ__init__©Úselfs    ú\/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/twisted/internet/epollreactor.pyr   zEPollReactor.__init__G   s_   € õ ˜T‘{”{ˆŒÝ‘e”eˆŒÝ‘u”uˆŒØˆÔÝ"+Ô">¸tÑ"DÔ"DˆÔÝÔ"×+Ò+¨DÑ1Ô1Ð1Ð1Ð1ó    c                 óò   — |                      ¦   «         }||vr^|}||v r!||z  }| j                             ||¦  «         n| j                             ||¦  «         |                     |¦  «         |||<   dS dS )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Úflagss	            r   Ú_addzEPollReactor._addV   s�   € ð �ZŠZ‰\Œ\ˆØ�WÐÐØˆEð �Uˆ{ˆ{Ø˜Ñ"�Ø”×#Ò# B¨Ñ.Ô.Ð.Ð.à”×%Ò% b¨%Ñ0Ô0Ð0ð �KŠK˜‰OŒOˆOØ!ˆK˜‰OˆOˆOð! Ðr   c                 ó   — 	 |                       || j        | j        | j        t          t
          ¦  «         dS # t          $ r<}|j        t          j        k    r| j	         
                    |¦  «         n‚ Y d}~dS d}~ww xY w)zR
        Add a FileDescriptor for notification of data available to read.
        N)r)   r   r   r   r
   r   ÚOSErrorÚerrnoÚEPERMr   Ú	addReader)r   ÚreaderÚes      r   r.   zEPollReactor.addReaderp   sž   € ð	Ø�IŠIØ˜œ T¤\°4Ô3DÅgÍxñô ð ð ð øõ ð 	ð 	ð 	ØŒw�%œ+Ò%Ð%ð Ô'×1Ò1°&Ñ9Ô9Ð9Ð9àð :Ð9Ð9Ð9Ð9Ð9øøøøð	øøøó   ‚37 ·
A=Á1A8Á8A=c                 ó   — 	 |                       || j        | j        | j        t          t
          ¦  «         dS # t          $ r<}|j        t          j        k    r| j	         
                    |¦  «         n‚ Y d}~dS d}~ww xY w)zS
        Add a FileDescriptor for notification of data available to write.
        N)r)   r   r   r   r   r
   r+   r,   r-   r   Ú	addWriter)r   Úwriterr0   s      r   r3   zEPollReactor.addWriter�   sŸ   € ð	Ø�IŠIØ˜œ d¤k°4Ô3DÅhÕPWñô ð ð ð øõ ð 	ð 	ð 	ØŒw�%œ+Ò%Ð%ð Ô'×1Ò1°&Ñ9Ô9Ð9Ð9àð :Ð9Ð9Ð9Ð9Ð9øøøøð	øøør1   c                 ó2  — |                      ¦   «         }|dk    r"|                     ¦   «         D ]\  }}||u r nŒdS ||v rV||v r|}	| j                             ||	¦  «         n||= | j                             |¦  «         |                     |¦  «         dS dS )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   Úitemsr   r   Ú
unregisterÚremove)
r   r!   r"   r#   r$   r%   r&   r'   Úfdesr(   s
             r   Ú_removezEPollReactor._remove’   sÁ   € ð �ZŠZ‰\Œ\ˆØ�Š8ˆ8Ø'×-Ò-Ñ/Ô/ð ð ‘��DØ˜$�;�;Ø�Eð ð �Ø�ˆ=ˆ=Ø�Uˆ{ˆ{Ø!�à”×#Ò# B¨Ñ.Ô.Ð.Ð.à �Oà”×'Ò'¨Ñ+Ô+Ð+Ø�NŠN˜2ÑÔÐÐÐð ˆ=r   c                 óØ   — | j                              |¦  «        r| j                              |¦  «         dS |                      || j        | j        | j        t          t          ¦  «         dS )zQ
        Remove a Selectable for notification of data available to read.
        N)	r   Ú	isReadingÚremoveReaderr;   r   r   r   r
   r   )r   r/   s     r   r>   zEPollReactor.removeReader«   sm   € ð Ô"×,Ò,¨VÑ4Ô4ð 	ØÔ#×0Ò0°Ñ8Ô8Ð8ØˆFØ�ŠØ�D”K ¤¨tÔ/@Å'Í8ñ	
ô 	
ð 	
ð 	
ð 	
r   c                 óØ   — | j                              |¦  «        r| j                              |¦  «         dS |                      || j        | j        | j        t          t          ¦  «         dS )zR
        Remove a Selectable for notification of data available to write.
        N)	r   Ú	isWritingÚremoveWriterr;   r   r   r   r   r
   )r   r4   s     r   rA   zEPollReactor.removeWriter¶   sm   € ð Ô"×,Ò,¨VÑ4Ô4ð 	ØÔ#×0Ò0°Ñ8Ô8Ð8ØˆFØ�ŠØ�D”L $¤+¨tÔ/@Å(ÍGñ	
ô 	
ð 	
ð 	
ð 	
r   c                 ó¨   ‡ — ‰                       ˆ fd„‰ j        D ¦   «         ˆ fd„‰ j        D ¦   «         ¦  «        ‰ j                             ¦   «         z   S )zD
        Remove all selectables, and return a list of them.
        c                 ó*   •— g | ]}‰j         |         ‘ŒS © ©r   ©Ú.0r'   r   s     €r   ú
<listcomp>z*EPollReactor.removeAll.<locals>.<listcomp>Ç   s!   ø€ Ð=Ð=Ð=¨2�Ô" 2Ô&Ð=Ð=Ð=r   c                 ó*   •— g | ]}‰j         |         ‘ŒS rD   rE   rF   s     €r   rH   z*EPollReactor.removeAll.<locals>.<listcomp>È   s!   ø€ Ð>Ð>Ð>¨2�Ô" 2Ô&Ð>Ð>Ð>r   )Ú
_removeAllr   r   r   Ú	removeAllr   s   `r   rK   zEPollReactor.removeAllÁ   sf   ø€ ð
 �OŠOØ=Ð=Ð=Ð=°´Ð=Ñ=Ô=Ø>Ð>Ð>Ð>°´Ð>Ñ>Ô>ñô ð Ô%×/Ò/Ñ1Ô1ñ	2ð	
r   c                 ó^   ‡ — ˆ fd„‰ j         D ¦   «         ‰ j                             ¦   «         z   S )Nc                 ó*   •— g | ]}‰j         |         ‘ŒS rD   rE   rF   s     €r   rH   z+EPollReactor.getReaders.<locals>.<listcomp>Î   ó.   ø€ ð 
ð 
ð 
Ø&(ˆDÔ˜bÔ!ð
ð 
ð 
r   )r   r   Ú
getReadersr   s   `r   rO   zEPollReactor.getReadersÍ   sG   ø€ ð
ð 
ð 
ð 
Ø,0¬Kð
ñ 
ô 
àÔ#×.Ò.Ñ0Ô0ñ1ð 	1r   c                 ó^   ‡ — ˆ fd„‰ j         D ¦   «         ‰ j                             ¦   «         z   S )Nc                 ó*   •— g | ]}‰j         |         ‘ŒS rD   rE   rF   s     €r   rH   z+EPollReactor.getWriters.<locals>.<listcomp>Ó   rN   r   )r   r   Ú
getWritersr   s   `r   rR   zEPollReactor.getWritersÒ   sG   ø€ ð
ð 
ð 
ð 
Ø,0¬Lð
ñ 
ô 
àÔ#×.Ò.Ñ0Ô0ñ1ð 	1r   c                 óR  — |€d}	 | j                              |t          | j        ¦  «        ¦  «        }n.# t          $ r!}|j        t
          j        k    rY d}~dS ‚ d}~ww xY w| j        }|D ];\  }}	 | j        |         }t          j	        |||||¦  «         Œ,# t          $ r Y Œ8w xY wdS )z1
        Poll the poller for new events.
        Nr6   )r   ÚpollÚlenr   r+   r,   ÚEINTRÚ_doReadOrWriter   ÚcallWithLoggerÚKeyError)r   ÚtimeoutÚlÚerrÚ_drdwr'   r%   Ú
selectables           r   ÚdoPollzEPollReactor.doPoll×   s÷   € ð ˆ?ØˆGð	ð
 ”×!Ò! '­3¨tÔ/@Ñ+AÔ+AÑBÔBˆAˆAøÝð 	ð 	ð 	ØŒy�EœKÒ'Ð'Ø�����ð
 øøøøð	øøøð Ô#ˆØð 	Mð 	M‰IˆB�ðMØ!Ô.¨rÔ2�
õ Ô" :¨u°jÀ"ÀeÑLÔLÐLÐLøõ ð ð ð Ø�ðøøøð	Mð 	Ms,   †-4 ´
A¾AÁAÁAÁ1BÂ
B$Â#B$N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r	   Ú_POLL_DISCONNECTEDr
   Ú_POLL_INr   Ú	_POLL_OUTr   r)   r.   r3   r;   r>   rA   rK   rO   rR   r_   ÚdoIterationrD   r   r   r   r   %   sÞ   € € € € € ðð ð8 " HÑ,ÐØ€HØ€Ið2ð 2ð 2ð"ð "ð "ð4ð ð ð"ð ð ð"ð ð ð2	
ð 	
ð 	
ð	
ð 	
ð 	
ð

ð 

ð 

ð1ð 1ð 1ð
1ð 1ð 1ð
Mð Mð Mð> €K€K€Kr   r   c                  óD   — t          ¦   «         } ddlm}  || ¦  «         dS )z&
    Install the epoll() reactor.
    r   )ÚinstallReactorN)r   Útwisted.internet.mainri   )Úpri   s     r   Úinstallrl   ù   s5   € õ 	‰Œ€AØ4Ð4Ð4Ð4Ð4Ð4à€N�1ÑÔÐÐÐr   rl   )rc   r,   ÚselectÚzope.interfacer   Útwisted.internetr   Útwisted.internet.interfacesr   Útwisted.pythonr   Úgetattrr   r   r	   r
   r   ÚAttributeErrorr0   ÚImportErrorr   Ú_PollLikeMixinr   rl   Ú__all__rD   r   r   ú<module>rw      sg  ððð ð €€€Ø €€€à &Ð &Ð &Ð &Ð &Ð &à &Ð &Ð &Ð &Ð &Ð &Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø Ð Ð Ð Ð Ð ðð
 ˆG�F˜GÑ$Ô$€EØˆw�v˜zÑ*Ô*€HØˆw�v˜zÑ*Ô*€HØˆg�f˜iÑ(Ô(€GØˆw�v˜zÑ*Ô*€H€HøØð ð ð Ø
ˆ+�a‰.Œ.Ðøøøøðøøøð €ˆ]ÑÔðPð Pð Pð Pð P�9Ô-¨yÔ/Gñ Pô Pñ ÔðPðfð ð ð ˜9Ð
%€€€s   ¤<A! Á!A6Á&A1Á1A6