<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>

YfN                 @   s_  d  Z  d g 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 d d	 l m	 Z	 d d
 l m
 Z
 d d l m Z Gd d   d e
 j e
 j  Z Gd d   d e e
 j  Z Gd d   d e e
 j  Z Gd d   d e  Z Gd d   d e e e
 j  Z Gd d   d e e e
 j  Z Gd d   d e j  Z d S)zEvent loop using a proactor and related classes.

A proactor is a "notify-on-completion" multiplexer.  Currently a
proactor is only implemented on Windows with IOCP.
BaseProactorEventLoop    N   )base_events)compat)	constants)futures)sslproto)
transports)loggerc                   s   e  Z d  Z d Z d d d   f d d  Z d d   Z d d   Z d	 d
   Z d d   Z d d   Z	 d d   Z
 e j r d d   Z d d d  Z d d   Z d d   Z d d   Z   S)_ProactorBasePipeTransportz*Base class for pipe and socket transports.Nc                s   t    j | |  |  j |  | |  _ | |  _ | |  _ d  |  _ d  |  _ d  |  _ d |  _	 d |  _
 d |  _ d |  _ |  j d  k	 r |  j j   |  j j |  j j |   | d  k	 r |  j j t j | d   d  S)Nr   F)super__init__
_set_extra_sock	_protocol_server_buffer	_read_fut
_write_fut_pending_write
_conn_lost_closing_eof_writtenZ_attach_loop	call_soonZconnection_mader   Z_set_result_unless_cancelled)selfloopsockprotocolwaiterextraserver)	__class__ </opt/alt/python35/lib64/python3.5/asyncio/proactor_events.pyr      s$    										z#_ProactorBasePipeTransport.__init__c             C   s  |  j  j g } |  j d  k r. | j d  n |  j rD | j d  |  j d  k	 rm | j d |  j j    |  j d  k	 r | j d |  j  |  j d  k	 r | j d |  j  |  j r t	 |  j  } | j d |  |  j
 r | j d  d d	 j |  S)
Nclosedclosingzfd=%szread=%szwrite=%rzwrite_bufsize=%szEOF writtenz<%s> )r"   __name__r   appendr   filenor   r   r   lenr   join)r   infobufsizer#   r#   r$   __repr__/   s"    			z#_ProactorBasePipeTransport.__repr__c             C   s   | |  j  d <d  S)Npipe)_extra)r   r   r#   r#   r$   r   B   s    z%_ProactorBasePipeTransport._set_extrac             C   s   | |  _  d  S)N)r   )r   r   r#   r#   r$   set_protocolE   s    z'_ProactorBasePipeTransport.set_protocolc             C   s   |  j  S)N)r   )r   r#   r#   r$   get_protocolH   s    z'_ProactorBasePipeTransport.get_protocolc             C   s   |  j  S)N)r   )r   r#   r#   r$   
is_closingK   s    z%_ProactorBasePipeTransport.is_closingc             C   s}   |  j  r d  Sd |  _  |  j d 7_ |  j rT |  j d  k rT |  j j |  j d   |  j d  k	 ry |  j j   d  |  _ d  S)NTr   )	r   r   r   r   r   r   _call_connection_lostr   cancel)r   r#   r#   r$   closeN   s    		z _ProactorBasePipeTransport.closec             C   s1   |  j  d  k	 r- t j d |  t  |  j   d  S)Nzunclosed transport %r)r   warningswarnResourceWarningr7   )r   r#   r#   r$   __del__]   s    z"_ProactorBasePipeTransport.__del__zFatal error on pipe transportc          	   C   sy   t  | t j  r= |  j j   rh t j d |  | d d n+ |  j j d | d | d |  d |  j i  |  j	 |  d  S)Nz%r: %sexc_infoTmessage	exceptionZ	transportr   )

isinstancer   Z_FATAL_ERROR_IGNOREr   	get_debugr
   debugcall_exception_handlerr   _force_close)r   excr=   r#   r#   r$   _fatal_errorb   s    	z'_ProactorBasePipeTransport._fatal_errorc             C   s   |  j  r d  Sd |  _  |  j d 7_ |  j rD |  j j   d  |  _ |  j rc |  j j   d  |  _ d |  _ d  |  _ |  j j |  j	 |  d  S)NTr   r   )
r   r   r   r6   r   r   r   r   r   r5   )r   rD   r#   r#   r$   rC   o   s    								z'_ProactorBasePipeTransport._force_closec             C   s   z |  j  j |  Wd  t |  j d  r< |  j j t j  |  j j   d  |  _ |  j } | d  k	 rz | j	   d  |  _ Xd  S)Nshutdown)
r   Zconnection_losthasattrr   rF   socketZ	SHUT_RDWRr7   r   Z_detach)r   rD   r!   r#   r#   r$   r5   ~   s    		
z0_ProactorBasePipeTransport._call_connection_lostc             C   s/   |  j  } |  j d  k	 r+ | t |  j  7} | S)N)r   r   r+   )r   sizer#   r#   r$   get_write_buffer_size   s    	z0_ProactorBasePipeTransport.get_write_buffer_size)r(   
__module____qualname____doc__r   r/   r   r2   r3   r4   r7   r   ZPY34r;   rE   rC   r5   rJ   r#   r#   )r"   r$   r      s   	r   c                   sX   e  Z d  Z d Z d d d   f d d  Z d d   Z d d   Z d d	 d
  Z   S)_ProactorReadPipeTransportzTransport for read pipes.Nc                s?   t    j | | | | | |  d |  _ |  j j |  j  d  S)NF)r   r   _pausedr   r   _loop_reading)r   r   r   r   r   r    r!   )r"   r#   r$   r      s    	z#_ProactorReadPipeTransport.__init__c             C   sV   |  j  r t d   |  j r* t d   d |  _ |  j j   rR t j d |   d  S)Nz#Cannot pause_reading() when closingzAlready pausedTz%r pauses reading)r   RuntimeErrorrO   r   r@   r
   rA   )r   r#   r#   r$   pause_reading   s    			z(_ProactorReadPipeTransport.pause_readingc             C   sg   |  j  s t d   d |  _  |  j r+ d  S|  j j |  j |  j  |  j j   rc t j	 d |   d  S)Nz
Not pausedFz%r resumes reading)
rO   rQ   r   r   r   rP   r   r@   r
   rA   )r   r#   r#   r$   resume_reading   s    			z)_ProactorReadPipeTransport.resume_readingc             C   s  |  j  r d  Sd  } zy | d  k	 rg |  j | k sR |  j d  k rL |  j sR t  d  |  _ | j   } |  j rz d  } d  S| d k r d  S|  j j j |  j d  |  _ Wn t	 k
 r} zC |  j s |  j
 | d  n" |  j j   r t j d d d WYd  d  } ~ Xn t k
 r?} z |  j |  WYd  d  } ~ Xnh t k
 rs} z |  j
 | d  WYd  d  } ~ Xn4 t j k
 r|  j s  Yn X|  j j |  j  Wd  | r|  j j |  nJ | d  k	 r|  j j   rt j d |   |  j j   } | s|  j   Xd  S)N    i   z"Fatal read error on pipe transportz*Read error on pipe transport while closingr<   Tz%r received EOF)rO   r   r   AssertionErrorresultr   	_proactorrecvr   ConnectionAbortedErrorrE   r@   r
   rA   ConnectionResetErrorrC   OSErrorr   CancelledErroradd_done_callbackrP   r   Zdata_receivedZeof_receivedr7   )r   futdatarD   Z	keep_openr#   r#   r$   rP      sJ    			"	"	z(_ProactorReadPipeTransport._loop_reading)r(   rK   rL   rM   r   rR   rS   rP   r#   r#   )r"   r$   rN      s   	
rN   c               @   sX   e  Z d  Z d Z d d   Z d d d d  Z d d   Z d	 d
   Z d d   Z d S)_ProactorBaseWritePipeTransportzTransport for write pipes.c             C   s  t  | t t t f  s7 d t |  j } t |   |  j rL t d   | sV d  S|  j	 r |  j	 t
 j k r~ t j d  |  j	 d 7_	 d  S|  j d  k r |  j d  k s t  |  j d t |   n? |  j s t |  |  _ |  j   n |  j j |  |  j   d  S)Nz3data argument must be a bytes-like object, not '%s'zwrite_eof() already calledzsocket.send() raised exception.r   r_   )r?   bytes	bytearray
memoryviewtyper(   	TypeErrorr   rQ   r   r   Z!LOG_THRESHOLD_FOR_CONNLOST_WRITESr
   warningr   r   rU   _loop_writing_maybe_pause_protocolextend)r   r_   msgr#   r#   r$   write   s*    			z%_ProactorBaseWritePipeTransport.writeNc             C   s  y+| |  j  k s t  d  |  _  d |  _ | r: | j   | d  k rX |  j } d  |  _ | s |  j r} |  j j |  j d   |  j	 r |  j
 j t j  |  j   n |  j j j |  j
 |  |  _  |  j  j   s|  j d k s t  t |  |  _ |  j  j |  j  |  j   n |  j  j |  j  Wnf t k
 r_} z |  j |  WYd  d  } ~ Xn5 t k
 r} z |  j | d  WYd  d  } ~ Xn Xd  S)Nr   z#Fatal write error on pipe transport)r   rU   r   rV   r   r   r   r   r5   r   r   rF   rH   SHUT_WRZ_maybe_resume_protocolrW   senddoner+   r]   rg   rh   rZ   rC   r[   rE   )r   fr_   rD   r#   r#   r$   rg     s4    		
				z-_ProactorBaseWritePipeTransport._loop_writingc             C   s   d S)NTr#   )r   r#   r#   r$   can_write_eof/  s    z-_ProactorBaseWritePipeTransport.can_write_eofc             C   s   |  j    d  S)N)r7   )r   r#   r#   r$   	write_eof2  s    z)_ProactorBaseWritePipeTransport.write_eofc             C   s   |  j  d   d  S)N)rC   )r   r#   r#   r$   abort5  s    z%_ProactorBaseWritePipeTransport.abort)	r(   rK   rL   rM   rk   rg   rp   rq   rr   r#   r#   r#   r$   r`      s   $#r`   c                   s.   e  Z d  Z   f d d   Z d d   Z   S)_ProactorWritePipeTransportc                sH   t    j | |   |  j j j |  j d  |  _ |  j j |  j  d  S)N   )	r   r   r   rW   rX   r   r   r]   _pipe_closed)r   argskw)r"   r#   r$   r   :  s    z$_ProactorWritePipeTransport.__init__c             C   s   | j    r d  S| j   d k s( t  |  j rJ |  j d  k sF t  d  S| |  j k sn t | |  j f   d  |  _ |  j d  k	 r |  j t    n
 |  j   d  S)NrT   )	Z	cancelledrV   rU   r   r   r   rC   BrokenPipeErrorr7   )r   r^   r#   r#   r$   ru   ?  s    	$	z(_ProactorWritePipeTransport._pipe_closed)r(   rK   rL   r   ru   r#   r#   )r"   r$   rs   9  s   rs   c               @   s.   e  Z d  Z d Z d d   Z d d   Z d S)_ProactorDuplexPipeTransportzTransport for duplex pipes.c             C   s   d S)NFr#   )r   r#   r#   r$   rp   T  s    z*_ProactorDuplexPipeTransport.can_write_eofc             C   s
   t   d  S)N)NotImplementedError)r   r#   r#   r$   rq   W  s    z&_ProactorDuplexPipeTransport.write_eofN)r(   rK   rL   rM   rp   rq   r#   r#   r#   r$   ry   O  s   ry   c               @   s:   e  Z d  Z d Z d d   Z d d   Z d d   Z d S)	_ProactorSocketTransportz Transport for connected sockets.c             C   s   | |  j  d <y | j   |  j  d <Wn@ t j t f k
 rf |  j j   rb t j d | d d Yn Xd |  j  k r y | j	   |  j  d <Wn@ t j t f k
 r |  j j   r t j d | d d Yn Xd  S)NrH   Zsocknamezgetsockname() failed on %rr<   Tpeernamezgetpeername() failed on %r)
r1   ZgetsocknamerH   errorAttributeErrorr   r@   r
   rf   Zgetpeername)r   r   r#   r#   r$   r   `  s    		z#_ProactorSocketTransport._set_extrac             C   s   d S)NTr#   )r   r#   r#   r$   rp   p  s    z&_ProactorSocketTransport.can_write_eofc             C   sE   |  j  s |  j r d  Sd |  _ |  j d  k rA |  j j t j  d  S)NT)r   r   r   r   rF   rH   rl   )r   r#   r#   r$   rq   s  s
    	z"_ProactorSocketTransport.write_eofN)r(   rK   rL   rM   r   rp   rq   r#   r#   r#   r$   r{   [  s   r{   c                   sN  e  Z d  Z   f d d   Z d d d d d  Z d d d d d d	 d d
 d d d Z d d d d  Z d d d d  Z d d d d  Z   f d d   Z	 d d   Z
 d d   Z d d   Z d d   Z d d   Z d d    Z d! d"   Z d d# d$  Z d% d&   Z d d d' d( d)  Z d* d+   Z d, d-   Z d. d/   Z   S)0r   c                sb   t    j   t j d | j j  | |  _ | |  _ d  |  _ i  |  _	 | j
 |   |  j   d  S)NzUsing proactor: %s)r   r   r
   rA   r"   r(   rW   	_selector_self_reading_future_accept_futuresZset_loop_make_self_pipe)r   Zproactor)r"   r#   r$   r   }  s    				zBaseProactorEventLoop.__init__Nc             C   s   t  |  | | | | |  S)N)r{   )r   r   r   r   r    r!   r#   r#   r$   _make_socket_transport  s    z,BaseProactorEventLoop._make_socket_transportserver_sideFserver_hostnamer    r!   c      
      C   sY   t  j   s t d   t  j |  | | | | |  }	 t |  | |	 d | d | |	 j S)NzOProactor event loop requires Python 3.5 or newer (ssl.MemoryBIO) to support SSLr    r!   )r   Z_is_sslproto_availablerz   ZSSLProtocolr{   Z_app_transport)
r   Zrawsockr   
sslcontextr   r   r   r    r!   Zssl_protocolr#   r#   r$   _make_ssl_transport  s    z)BaseProactorEventLoop._make_ssl_transportc             C   s   t  |  | | | |  S)N)ry   )r   r   r   r   r    r#   r#   r$   _make_duplex_pipe_transport  s    z1BaseProactorEventLoop._make_duplex_pipe_transportc             C   s   t  |  | | | |  S)N)rN   )r   r   r   r   r    r#   r#   r$   _make_read_pipe_transport  s    z/BaseProactorEventLoop._make_read_pipe_transportc             C   s   t  |  | | | |  S)N)rs   )r   r   r   r   r    r#   r#   r$   _make_write_pipe_transport  s    z0BaseProactorEventLoop._make_write_pipe_transportc                sl   |  j    r t d   |  j   r( d  S|  j   |  j   |  j j   d  |  _ d  |  _ t   j   d  S)Nz!Cannot close a running event loop)	Z
is_runningrQ   	is_closed_stop_accept_futures_close_self_piperW   r7   r   r   )r   )r"   r#   r$   r7     s    

		zBaseProactorEventLoop.closec             C   s   |  j  j | |  S)N)rW   rX   )r   r   nr#   r#   r$   	sock_recv  s    zBaseProactorEventLoop.sock_recvc             C   s   |  j  j | |  S)N)rW   rm   )r   r   r_   r#   r#   r$   sock_sendall  s    z"BaseProactorEventLoop.sock_sendallc             C   s   |  j  j | |  S)N)rW   Zconnect)r   r   Zaddressr#   r#   r$   sock_connect  s    z"BaseProactorEventLoop.sock_connectc             C   s   |  j  j |  S)N)rW   accept)r   r   r#   r#   r$   sock_accept  s    z!BaseProactorEventLoop.sock_acceptc             C   s
   t   d  S)N)rz   )r   r#   r#   r$   _socketpair  s    z!BaseProactorEventLoop._socketpairc             C   sd   |  j  d  k	 r% |  j  j   d  |  _  |  j j   d  |  _ |  j j   d  |  _ |  j d 8_ d  S)Nr   )r   r6   _ssockr7   _csock_internal_fds)r   r#   r#   r$   r     s    			z&BaseProactorEventLoop._close_self_pipec             C   s[   |  j    \ |  _ |  _ |  j j d  |  j j d  |  j d 7_ |  j |  j  d  S)NFr   )r   r   r   Zsetblockingr   r   _loop_self_reading)r   r#   r#   r$   r     s
    z%BaseProactorEventLoop._make_self_pipec             C   s   y2 | d  k	 r | j    |  j j |  j d  } Wn\ t j k
 rM d  SYn] t k
 r } z$ |  j d d d | d |  i  WYd  d  } ~ Xn X| |  _ | j	 |  j
  d  S)Ni   r=   z.Error on reading from the event loop self piper>   r   )rV   rW   rX   r   r   r\   	ExceptionrB   r   r]   r   )r   ro   rD   r#   r#   r$   r     s    
 	z(BaseProactorEventLoop._loop_self_readingc             C   s   |  j  j d  d  S)Ns    )r   rm   )r   r#   r#   r$   _write_to_self  s    z$BaseProactorEventLoop._write_to_selfd   c                s5   d         f d d     j     d  S)Nc                s  y |  d  k	 r |  j    \ } }  j r@ t j d  | |     }  d  k	 r  j | |  d d d d | i d  n"  j | | d d | i d   j   r d  S j j   }  Wn t	 k
 rL} zb  j
   d k r j d d	 d
 | d  i   j   n  j r:t j d  d d WYd  d  } ~ Xn? t j k
 rj j   Yn! X|   j  j
   <|  j    d  S)Nz#%r got a new connection from %r: %rr   Tr    r|   r!   r   r=   zAccept failed on a socketr>   rH   zAccept failed on socket %rr<   )rV   Z_debugr
   rA   r   r   r   rW   r   r[   r*   rB   r7   r   r\   r   r]   )ro   ZconnZaddrr   rD   )r   protocol_factoryr   r!   r   r   r#   r$   r     s>    						z2BaseProactorEventLoop._start_serving.<locals>.loop)r   )r   r   r   r   r!   Zbacklogr#   )r   r   r   r!   r   r   r$   _start_serving  s    $$z$BaseProactorEventLoop._start_servingc             C   s   d  S)Nr#   )r   Z
event_listr#   r#   r$   _process_events  s    z%BaseProactorEventLoop._process_eventsc             C   s5   x! |  j  j   D] } | j   q W|  j  j   d  S)N)r   valuesr6   clear)r   Zfuturer#   r#   r$   r     s    z*BaseProactorEventLoop._stop_accept_futuresc             C   s(   |  j    |  j j |  | j   d  S)N)r   rW   _stop_servingr7   )r   r   r#   r#   r$   r   #  s    
z#BaseProactorEventLoop._stop_serving)r(   rK   rL   r   r   r   r   r   r   r7   r   r   r   r   r   r   r   r   r   r   r   r   r   r#   r#   )r"   r$   r   {  s4   

()rM   __all__rH   r8    r   r   r   r   r   r	   logr
   Z_FlowControlMixinZBaseTransportr   ZReadTransportrN   ZWriteTransportr`   rs   Z	Transportry   r{   ZBaseEventLoopr   r#   r#   r#   r$   <module>   s0   	MT
