<!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  } zhyf | d  k	 r: d  |  _ | j   } |  j rM 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
 rF} z |  j	 | d  WYd  d  } ~ Xn4 t j k
 rf|  j sb  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   resultr   r   	_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      sF    			"	"	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 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   _loop_writingr   _maybe_pause_protocolextend)r   r^   msgr#   r#   r$   write   s(    			z%_ProactorBaseWritePipeTransport.writeNc             C   sn  yd  |  _  d |  _ | r% | j   | d  k rC |  j } d  |  _ | s |  j rh |  j j |  j d   |  j r |  j	 j
 t j  |  j   no |  j j j |  j	 |  |  _  |  j  j   s t |  |  _ |  j  j |  j  |  j   n |  j  j |  j  Wnf t k
 r5} z |  j |  WYd  d  } ~ Xn5 t k
 ri} z |  j | d  WYd  d  } ~ Xn Xd  S)Nr   z#Fatal write error on pipe transport)r   r   rU   r   r   r   r   r5   r   r   rF   rH   SHUT_WRZ_maybe_resume_protocolrV   senddoner+   r\   rf   rg   rY   rC   rZ   rE   )r   fr^   rD   r#   r#   r$   rf     s0    		
				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   rj   rf   ro   rp   rq   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   rV   rW   r   r   r\   _pipe_closed)r   argskw)r"   r#   r$   r   :  s    z$_ProactorWritePipeTransport.__init__c             C   sV   | j    r d  S|  j r d  Sd  |  _ |  j d  k	 rH |  j t    n
 |  j   d  S)N)Z	cancelledr   r   r   rC   BrokenPipeErrorr7   )r   r]   r#   r#   r$   rt   ?  s    		z(_ProactorWritePipeTransport._pipe_closed)r(   rK   rL   r   rt   r#   r#   )r"   r$   rr   9  s   rr   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$   ro   T  s    z*_ProactorDuplexPipeTransport.can_write_eofc             C   s
   t   d  S)N)NotImplementedError)r   r#   r#   r$   rp   W  s    z&_ProactorDuplexPipeTransport.write_eofN)r(   rK   rL   rM   ro   rp   r#   r#   r#   r$   rx   O  s   rx   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
   re   Zgetpeername)r   r   r#   r#   r$   r   `  s    		z#_ProactorSocketTransport._set_extrac             C   s   d S)NTr#   )r   r#   r#   r$   ro   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   rk   )r   r#   r#   r$   rp   s  s
    	z"_ProactorSocketTransport.write_eofN)r(   rK   rL   rM   r   ro   rp   r#   r#   r#   r$   rz   [  s   rz   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(   rV   	_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)rz   )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_availablery   ZSSLProtocolrz   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)rx   )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)rr   )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_piperV   r7   r~   r   )r   )r"   r#   r$   r7     s    

		zBaseProactorEventLoop.closec             C   s   |  j  j | |  S)N)rV   rW   )r   r   nr#   r#   r$   	sock_recv  s    zBaseProactorEventLoop.sock_recvc             C   s   |  j  j | |  S)N)rV   rl   )r   r   r^   r#   r#   r$   sock_sendall  s    z"BaseProactorEventLoop.sock_sendallc             C   s   |  j  j | |  S)N)rV   Zconnect)r   r   Zaddressr#   r#   r$   sock_connect  s    z"BaseProactorEventLoop.sock_connectc             C   s   |  j  j |  S)N)rV   accept)r   r   r#   r#   r$   sock_accept  s    z!BaseProactorEventLoop.sock_acceptc             C   s
   t   d  S)N)ry   )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   )rU   rV   rW   r   r   r[   	ExceptionrB   r   r\   r   )r   rn   rD   r#   r#   r$   r     s    
 	z(BaseProactorEventLoop._loop_self_readingc             C   s   |  j  j d  d  S)Ns    )r   rl   )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<   )rU   Z_debugr
   rA   r   r   r   rV   r   rZ   r*   rB   r7   r   r[   r   r\   )rn   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   rV   _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_   rr   Z	Transportrx   rz   ZBaseEventLoopr   r#   r#   r#   r$   <module>   s0   	MT
