
    \d                     B   U d Z ddlZddlZddlmZmZ ddlmZ ddlm	Z	 ddl
mZ ddlmZ ddlmZ dd	lmZ dd
lmZ ddZedk    reZnej        Z	 ddlmZ eZn# e$ r eZe	e         ed<   Y nw xY w ee           G d dej        e                      Zd ZdgZdS )z
Select reactor
    N)EBADFEINTR)sleep)Type)implementer)	posixbase)IReactorFDSet)log)platformTypec                     | s+|s)|d}nt          |d          }t          |           g g g fS ||dk    rd}t          j        | |||          \  } }}| ||z   g fS )zWin32 select wrapper.Ng{Gz?gMbP?g      ?)minr   select)rwetimeouts       >lib/python3.11/site-packages/twisted/internet/selectreactor.pywin32selectr      s      ?GG'5))Gg2rz 'C--mAq!W--GAq!a!eR<    win32)_ThreadedWin32EventsMixin
_extraBasec                   X    e Zd ZdZd Zd Zd ZeZd Zd Z	d Z
d Zd	 Zd
 Zd Zd ZdS )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                     t                      | _        t                      | _        t          j                            |            dS )zV
        Initialize file descriptor tracking dictionaries and the base class.
        N)set_reads_writesr   PosixReactorBase__init__selfs    r   r    zSelectReactor.__init__D   s7     eeuu"++D11111r   c                    t          j        d           t          | j                  }t          | j                  }| j                                         | j                                         | j        |f| j        |ffD ]\  }}|D ]w}	 t          j        |g|g|gd           |                    |           3# t          $ r8}t          j        d|z             | 	                    ||d           Y d }~pd }~ww xY wd S )Nz1Malformed file descriptor found.  Preening lists.r   zbad descriptor %sF)
r
   msglistr   r   clearr   add	Exception_disconnectSelectable)r"   readerswritersselSetselList
selectabler   s          r   _preenDescriptorszSelectReactor._preenDescriptorsL   s7   CDDDt{##t|$$!%g 6w8OP 	+ 	+OFG% + +
+M:,zlANNN
 JJz****	 ! E E EG/*<===..z1eDDDDDDDDE+	+ 	+s   B;;
C=.C88C=c                    	 t          | j        | j        g |          \  }}}n# t          $ r |                                  Y dS t
          $ r+ t          j                     |                                  Y dS t          $ rv}|j	        d         dv r| j        s| j        sY d}~dS  |j	        d         t          k    rY d}~dS |j	        d         t          k    r|                                  Y d}~dS  d}~ww xY w| j        }t          j        }|d| j        f|d| j        ffD ]\  }}	}
|D ]}||
vr |||||	           dS )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      doReaddoWrite)_selectr   r   
ValueErrorr/   	TypeErrorr
   errOSErrorargsr   r   _doReadOrWritecallWithLogger)r"   r   r   r   ignoredse_drdw_logrunselectablesmethodfdsetr.   s               r   doSelectzSelectReactor.doSelect\   s   	#DKr7KKMAq'' 	 	 	""$$$FF 	 	 	 GIII""$$$FF 	 	 	 wqzV## dl FFFFFu$$u$$&&((( #	& #$$+&	4<(+
 
	? 
	?&K * ? ?
 U**
E:v>>>>?	
	? 
	?s3    # C60C67	C6 C1#C1 *C10C11C6c                     	  t          ||                      }n<# t          $ r/ t          j                    d         }t	          j                     Y nw xY w|r|                     |||dk               d S d S )N   r2   )getattrBaseExceptionsysexc_infor
   r7   r)   )r"   r.   rA   whys       r   r:   zSelectReactor._doReadOrWrite   s    	-'*f--//CC 	 	 	,..#CGIIIII	  	L&&z3(8JKKKKK	L 	Ls    6AAc                 :    | j                             |           dS )zR
        Add a FileDescriptor for notification of data available to read.
        N)r   r'   r"   readers     r   	addReaderzSelectReactor.addReader   s     	r   c                 :    | j                             |           dS )zS
        Add a FileDescriptor for notification of data available to write.
        N)r   r'   r"   writers     r   	addWriterzSelectReactor.addWriter   s      	     r   c                 :    | j                             |           dS )zQ
        Remove a Selectable for notification of data available to read.
        N)r   discardrL   s     r   removeReaderzSelectReactor.removeReader   s      	F#####r   c                 :    | j                             |           dS )zR
        Remove a Selectable for notification of data available to write.
        N)r   rT   rP   s     r   removeWriterzSelectReactor.removeWriter   s      	V$$$$$r   c                 B    |                      | j        | j                  S N)
_removeAllr   r   r!   s    r   	removeAllzSelectReactor.removeAll   s    t{DL999r   c                 *    t          | j                  S rY   )r%   r   r!   s    r   
getReaderszSelectReactor.getReaders   s    DK   r   c                 *    t          | j                  S rY   )r%   r   r!   s    r   
getWriterszSelectReactor.getWriters   s    DL!!!r   N)__name__
__module____qualname____doc__r    r/   rC   doIterationr:   rN   rR   rU   rW   r[   r]   r_    r   r   r   r   8   s         2 2 2+ + + 2? 2? 2?h KL L L     ! ! !$ $ $% % %: : :! ! !" " " " "r   r   c                  D    t                      } ddlm}  ||            dS )zDConfigure the twisted mainloop to be run using the select() reactor.r   )installReactorN)r   twisted.internet.mainrg   )reactorrg   s     r   installrj      s3    ooG444444N7r   rj   rY   ) rc   r   rH   errnor   r   timer   typingr   zope.interfacer   twisted.internetr   twisted.internet.interfacesr	   twisted.pythonr
   twisted.python.runtimer   r   r4   "twisted.internet.win32eventreactorr   r   ImportErrorobject__annotations__r   r   rj   __all__re   r   r   <module>rx      s  
  
  



                     & & & & & & & & & & & & 5 5 5 5 5 5       / / / / / /   $ 7GGmG+LLLLLL +JJ  & & &%JV%%%%%& ]A" A" A" A" A"I.
 A" A" A"H   +s   A A10A1