<!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>

j fN                 @   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 e	 j
 ru d d   Z n  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   n  |  j j |  j j |   | d  k	 r |  j j t j | d   n  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/python34/lib64/python3.4/asyncio/proactor_events.pyr      s$    										z#_ProactorBasePipeTransport.__init__c             C   s  |  j  j g } |  j d  k r. | j d  n |  j rG | j d  n  |  j d  k	 rs | j d |  j j    n  |  j d  k	 r | j d |  j  n  |  j d  k	 r | j d |  j  n  |  j r t	 |  j  } | j d |  n  |  j
 r| j d  n  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   |  j  S)N)r   )r   r#   r#   r$   
is_closingE   s    z%_ProactorBasePipeTransport.is_closingc             C   s   |  j  r d  Sd |  _  |  j d 7_ |  j rW |  j d  k rW |  j j |  j d   n  |  j d  k	 r |  j j   d  |  _ n  d  S)NTr   )	r   r   r   r   r   r   _call_connection_lostr   cancel)r   r#   r#   r$   closeH   s    		z _ProactorBasePipeTransport.closec             C   s4   |  j  d  k	 r0 t j d |  t  |  j   n  d  S)Nzunclosed transport %r)r   warningswarnResourceWarningr5   )r   r#   r#   r$   __del__W   s    z"_ProactorBasePipeTransport.__del__zFatal error on pipe transportc             C   s   t  | t t f  rC |  j j   rr t j d |  | d d qr n/ |  j j i | d 6| d 6|  d 6|  j d 6 |  j	 |  d  S)Nz%r: %sexc_infoTmessage	exceptionZ	transportr   )

isinstanceBrokenPipeErrorConnectionResetErrorr   	get_debugr
   debugcall_exception_handlerr   _force_close)r   excr;   r#   r#   r$   _fatal_error\   s    z'_ProactorBasePipeTransport._fatal_errorc             C   s   |  j  r d  Sd |  _  |  j d 7_ |  j rG |  j j   d  |  _ n  |  j ri |  j j   d  |  _ n  d |  _ d  |  _ |  j j |  j	 |  d  S)NTr   r   )
r   r   r   r4   r   r   r   r   r   r3   )r   rD   r#   r#   r$   rC   i   s    						z'_ProactorBasePipeTransport._force_closec             C   s   z |  j  j |  Wd  t |  j d  r? |  j j t j  n  |  j j   d  |  _ |  j } | d  k	 r | j	   d  |  _ n  Xd  S)Nshutdown)
r   Zconnection_losthasattrr   rF   socketZ	SHUT_RDWRr5   r   Z_detach)r   rD   r!   r#   r#   r$   r3   x   s    		
z0_ProactorBasePipeTransport._call_connection_lostc             C   s2   |  j  } |  j d  k	 r. | t |  j  7} n  | 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   r5   r   ZPY34r9   rE   rC   r3   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   s_   |  j  r t d   n  |  j r0 t d   n  d |  _ |  j j   r[ t j d |   n  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   sm   |  j  s t d   n  d |  _  |  j r. d  S|  j j |  j |  j  |  j j   ri t j	 d |   n  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  } zqyi | d  k	 r= d  |  _ | j   } n  |  j rP d  } d  S| d k r` d  S|  j j j |  j d  |  _ Wn t k
 r } zF |  j s |  j	 | d  n% |  j j
   r t j d d d n  WYd  d  } ~ Xn t k
 r} z |  j |  WYd  d  } ~ Xnk t k
 rL} z |  j	 | d  WYd  d  } ~ Xn7 t j k
 ro|  j sk  n  Yn X|  j j |  j  Wd  | r|  j j |  nS | d  k	 r|  j j
   rt j d |   n  |  j j   } | s|  j   qn  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   r?   rC   OSErrorr   CancelledErroradd_done_callbackrP   r   Zdata_receivedZeof_receivedr5   )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  s0 t d t |    n  |  j rH t d   n  | sR d  S|  j r |  j t	 j
 k r} t j d  n  |  j d 7_ d  S|  j d  k r |  j d t |   n? |  j s t |  |  _ |  j   n |  j j |  |  j   d  S)Nz#data argument must be byte-ish (%r)zwrite_eof() already calledzsocket.send() raised exception.r   r]   )r=   bytes	bytearray
memoryview	TypeErrortyper   rQ   r   r   Z!LOG_THRESHOLD_FOR_CONNLOST_WRITESr
   warningr   _loop_writingr   _maybe_pause_protocolextend)r   r]   r#   r#   r$   write   s&    			z%_ProactorBaseWritePipeTransport.writeNc             C   sz  yd  |  _  d |  _ | r( | j   n  | d  k rI |  j } d  |  _ n  | s |  j rq |  j j |  j d   n  |  j r |  j	 j
 t j  n  |  j   no |  j j j |  j	 |  |  _  |  j  j   s t |  |  _ |  j  j |  j  |  j   n |  j  j |  j  Wnf t k
 rA} z |  j |  WYd  d  } ~ Xn5 t k
 ru} z |  j | d  WYd  d  } ~ Xn Xd  S)Nr   z#Fatal write error on pipe transport)r   r   rU   r   r   r   r   r3   r   r   rF   rH   SHUT_WRZ_maybe_resume_protocolrV   senddoner+   r[   re   rf   r?   rC   rY   rE   )r   fr]   rD   r#   r#   r$   re     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)r5   )r   r#   r#   r$   	write_eof+  s    z)_ProactorBaseWritePipeTransport.write_eofc             C   s   |  j  d   d  S)N)rC   )r   r#   r#   r$   abort.  s    z%_ProactorBaseWritePipeTransport.abort)	r(   rK   rL   rM   rh   re   rm   rn   ro   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   3  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   r>   r5   )r   r\   r#   r#   r$   rr   8  s    		z(_ProactorWritePipeTransport._pipe_closed)r(   rK   rL   r   rr   r#   r#   )r"   r$   rp   2  s   rp   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$   rm   M  s    z*_ProactorDuplexPipeTransport.can_write_eofc             C   s
   t   d  S)N)NotImplementedError)r   r#   r#   r$   rn   P  s    z&_ProactorDuplexPipeTransport.write_eofN)r(   rK   rL   rM   rm   rn   r#   r#   r#   r$   ru   H  s   ru   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 <WnC t j t f k
 ri |  j j   re t j d | d d n  Yn Xd |  j  k r y | j	   |  j  d <Wq t j t f k
 r |  j j   r t j d | d d n  Yq Xn  d  S)NrH   Zsocknamezgetsockname() failed on %rr:   Tpeernamezgetpeername() failed on %r)
r1   ZgetsocknamerH   errorAttributeErrorr   r@   r
   rd   Zgetpeername)r   r   r#   r#   r$   r   Y  s    		z#_ProactorSocketTransport._set_extrac             C   s   d S)NTr#   )r   r#   r#   r$   rm   i  s    z&_ProactorSocketTransport.can_write_eofc             C   sH   |  j  s |  j r d  Sd |  _ |  j d  k rD |  j j t j  n  d  S)NT)r   r   r   r   rF   rH   ri   )r   r#   r#   r$   rn   l  s
    	z"_ProactorSocketTransport.write_eofN)r(   rK   rL   rM   r   rm   rn   r#   r#   r#   r$   rw   T  s   rw   c                   sK  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(  Z d) d*   Z d+ d,   Z d- d.   Z   S)/r   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   v  s    				zBaseProactorEventLoop.__init__Nc             C   s   t  |  | | | | |  S)N)rw   )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   s\   t  j   s t d   n  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_availablerv   ZSSLProtocolrw   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)ru   )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)rp   )r   r   r   r   r    r#   r#   r$   _make_write_pipe_transport  s    z0BaseProactorEventLoop._make_write_pipe_transportc                so   |  j    r t d   n  |  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   r5   r{   r   )r   )r"   r#   r$   r5     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   rj   )r   r   r]   r#   r#   r$   sock_sendall  s    z"BaseProactorEventLoop.sock_sendallc             C   sv   y t  j | |  WnH t k
 r^ } z( t j d |   } | j |  | SWYd  d  } ~ Xn X|  j j | |  Sd  S)Nr   )r   Z_check_resolved_address
ValueErrorr   ZFutureZset_exceptionrV   Zconnect)r   r   Zaddresserrr\   r#   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)rv   )r   r#   r#   r$   _socketpair  s    z!BaseProactorEventLoop._socketpairc             C   sg   |  j  d  k	 r( |  j  j   d  |  _  n  |  j j   d  |  _ |  j j   d  |  _ |  j d 8_ d  S)Nr   )r|   r4   _ssockr5   _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   y5 | d  k	 r | j    n  |  j j |  j d  } Wn_ t j k
 rP d  SYn` t k
 r } z' |  j i d d 6| d 6|  d 6 WYd  d  } ~ Xn X| |  _ | j	 |  j
  d  S)Ni   z.Error on reading from the event loop self piper;   r<   r   )rU   rV   rW   r   r   rZ   	ExceptionrB   r|   r[   r   )r   rl   rD   r#   r#   r$   r     s    		z(BaseProactorEventLoop._loop_self_readingc             C   s   |  j  j d  d  S)Ns    )r   rj   )r   r#   r#   r$   _write_to_self  s    z$BaseProactorEventLoop._write_to_selfc                s5   d         f d d     j     d  S)Nc                s  y |  d  k	 r |  j    \ } }  j rC t j d  | |  n     }  d  k	 r  j | |  d d d i | d 6d  q  j | | d i | d 6d  n   j   r d  S j j   }  Wn t	 k
 rZ} zh  j
   d k r& j i d d	 6| d
 6 d 6  j   n"  j rHt j d  d d n  WYd  d  } ~ Xn? t j k
 rx j   Yn! X|   j  j
   <|  j    d  S)Nz#%r got a new connection from %r: %rr   Tr    rx   r!   r   zAccept failed on a socketr;   r<   rH   zAccept failed on socket %rr:   )rU   Z_debugr
   rA   r   r   r   rV   r   rY   r*   rB   r5   r   rZ   r}   r[   )rl   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!   r#   )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}   valuesr4   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_servingr5   )r   r   r#   r#   r$   r   #  s    
z#BaseProactorEventLoop._stop_serving)r(   rK   rL   r   r   r   r   r   r   r5   r   r   r   r   r   r   r~   r   r   r   r   r   r   r#   r#   )r"   r$   r   t  s4   


()rM   __all__rH   r6    r   r   r   r   r   r	   logr
   Z_FlowControlMixinZBaseTransportr   ZReadTransportrN   ZWriteTransportr^   rp   Z	Transportru   rw   ZBaseEventLoopr   r#   r#   r#   r$   <module>   s0   	zMS
