<!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>
3

  \O                 @   s   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 G dd de	je	jZG dd dee	jZG dd dee	jZG dd deZG dd deee	jZG dd deee	jZG dd  d ejZdS )BaseProactorEventLoop    N   )base_events)compat)	constants)futures)sslproto)
transports)loggerc                   s~   e Zd Z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rTdd ZdddZdd Zdd Zdd Z  ZS )_ProactorBasePipeTransportNc                s   t  j|| | j| || _|| _|| _d | _d | _d | _d| _	d| _
d| _d| _| jd k	rh| 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__ //usr/lib64/python3.6/asyncio/proactor_events.pyr      s$    



z#_ProactorBasePipeTransport.__init__c             C   s   | j jg}| jd kr |jd n| jr0|jd | jd k	rN|jd| jj   | jd k	rh|jd| j  | jd k	r|jd| j  | jrt	| 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 S d| _ |  jd7  _| j r@| jd kr@| jj| jd  | jd k	rZ| 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   s*   | j d k	r&tjd|  t| d | j  d S )Nzunclosed transport %r)source)r   warningswarnResourceWarningr7   )r   r#   r#   r$   __del__]   s    
z"_ProactorBasePipeTransport.__del__Fatal error on pipe transportc             C   sP   t |tjr*| jj rBtjd| |dd n| jj||| | jd | j	| d S )Nz%r: %sT)exc_info)message	exceptionZ	transportr   )

isinstancer   Z_FATAL_ERROR_IGNOREr   	get_debugr
   debugcall_exception_handlerr   _force_close)r   excr?   r#   r#   r$   _fatal_errorc   s    
z'_ProactorBasePipeTransport._fatal_errorc             C   sj   | j r
d S d| _ |  jd7  _| jr4| jj  d | _| jrJ| jj  d | _d| _d | _| jj| j	| d S )NTr   r   )
r   r   r   r6   r   r   r   r   r   r5   )r   rF   r#   r#   r$   rE   p   s    

z'_ProactorBasePipeTransport._force_closec             C   s^   z| j j| W d t| jdr,| jjtj | jj  d | _| j}|d k	rX|j	  d | _X d S )Nshutdown)
r   Zconnection_losthasattrr   rH   socketZ	SHUT_RDWRr7   r   Z_detach)r   rF   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)NNN)r=   )r(   
__module____qualname__r   r/   r   r2   r3   r4   r7   r   ZPY34r<   rG   rE   r5   rL   __classcell__r#   r#   )r"   r$   r      s    
r   c                   s8   e Zd Zd
 fdd	Zdd Zdd Zddd	Z  ZS )_ProactorReadPipeTransportNc                s4   t  j|||||| d| _d| _| jj| j d S )NF)r   r   _paused_reschedule_on_resumer   r   _loop_reading)r   r   r   r   r   r    r!   )r"   r#   r$   r      s    z#_ProactorReadPipeTransport.__init__c             C   s0   | j s| jrd S d| _| jj r,tjd|  d S )NTz%r pauses reading)r   rQ   r   rB   r
   rC   )r   r#   r#   r$   pause_reading   s
    
z(_ProactorReadPipeTransport.pause_readingc             C   sP   | j s| j rd S d| _| jr6| jj| j| j d| _| jj rLtj	d|  d S )NFz%r resumes reading)
r   rQ   rR   r   r   rS   r   rB   r
   rC   )r   r#   r#   r$   resume_reading   s    
z)_ProactorReadPipeTransport.resume_readingc             C   s  | j rd| _d S d }z"yH|d k	r0d | _|j }| jr>d }d S |dkrJd S | jjj| jd| _W n t	k
r } z2| js| j
|d n| jj rtjddd W Y d d }~X n tk
r } z| j| W Y d d }~X n^ tk
r } z| j
|d W Y d d }~X n0 tjk
r&   | js" Y nX | jj| j W d |rN| jj| n:|d k	r| jj rptjd|  | jj }|s| j  X d S )NT    i   z"Fatal read error on pipe transportz*Read error on pipe transport while closing)r>   z%r received EOF)rQ   rR   r   resultr   r   	_proactorrecvr   ConnectionAbortedErrorrG   rB   r
   rC   ConnectionResetErrorrE   OSErrorr   CancelledErroradd_done_callbackrS   r   Zdata_receivedZeof_receivedr7   )r   futdatarF   Z	keep_openr#   r#   r$   rS      sH    


z(_ProactorReadPipeTransport._loop_reading)NNN)N)r(   rM   rN   r   rT   rU   rS   rO   r#   r#   )r"   r$   rP      s
    
rP   c               @   s6   e Zd Zdd ZdddZdd Zdd	 Zd
d ZdS )_ProactorBaseWritePipeTransportc             C   s   t |tttfs&dt|j }t|| jr4td|s<d S | j	rj| j	t
jkrXtjd |  j	d7  _	d S | jd kr| jt|d n.| jst|| _| 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`   )rA   bytes	bytearray
memoryviewtyper(   	TypeErrorr   RuntimeErrorr   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   s  yd | _ d| _|r|j  |d kr.| j}d | _|sf| jrH| jj| jd  | jr\| j	j
tj | j  nN| jjj| j	|| _ | j j st|| _| j j| j | j  n| j j| j W nZ tk
r } z| j| W Y d d }~X n0 tk
r } z| j|d W Y d d }~X nX d S )Nr   z#Fatal write error on pipe transport)r   r   rW   r   r   r   r   r5   r   r   rH   rJ   SHUT_WRZ_maybe_resume_protocolrX   senddoner+   r^   ri   rj   r[   rE   r\   rG   )r   fr`   rF   r#   r#   r$   ri     s0    



z-_ProactorBaseWritePipeTransport._loop_writingc             C   s   dS )NTr#   )r   r#   r#   r$   can_write_eof0  s    z-_ProactorBaseWritePipeTransport.can_write_eofc             C   s   | j   d S )N)r7   )r   r#   r#   r$   	write_eof3  s    z)_ProactorBaseWritePipeTransport.write_eofc             C   s   | j d  d S )N)rE   )r   r#   r#   r$   abort6  s    z%_ProactorBaseWritePipeTransport.abort)NN)r(   rM   rN   rm   ri   rr   rs   rt   r#   r#   r#   r$   ra      s
   $
#ra   c                   s$   e Zd Z fddZdd Z  ZS )_ProactorWritePipeTransportc                s4   t  j|| | jjj| jd| _| jj| j d S )N   )	r   r   r   rX   rY   r   r   r^   _pipe_closed)r   argskw)r"   r#   r$   r   ;  s    z$_ProactorWritePipeTransport.__init__c             C   s@   |j  rd S | jrd S d | _| jd k	r4| jt  n| j  d S )N)Z	cancelledr   r   r   rE   BrokenPipeErrorr7   )r   r_   r#   r#   r$   rw   @  s    
z(_ProactorWritePipeTransport._pipe_closed)r(   rM   rN   r   rw   rO   r#   r#   )r"   r$   ru   :  s   ru   c               @   s   e Zd Zdd Zdd ZdS )_ProactorDuplexPipeTransportc             C   s   dS )NFr#   )r   r#   r#   r$   rr   U  s    z*_ProactorDuplexPipeTransport.can_write_eofc             C   s   t d S )N)NotImplementedError)r   r#   r#   r$   rs   X  s    z&_ProactorDuplexPipeTransport.write_eofN)r(   rM   rN   rr   rs   r#   r#   r#   r$   r{   P  s   r{   c                   s6   e Zd Zd
 fdd	Zdd Zdd Zdd	 Z  ZS )_ProactorSocketTransportNc                s$   t  j|||||| tj| d S )N)r   r   r   Z_set_nodelay)r   r   r   r   r   r    r!   )r"   r#   r$   r   a  s    z!_ProactorSocketTransport.__init__c             C   s   || j d< y|j | j d< W n4 tjtfk
rP   | jj rLtjd|dd Y nX d| j kry|j	 | j d< W n4 tjtfk
r   | jj rtjd|dd Y nX d S )NrJ   Zsocknamezgetsockname() failed on %rT)r>   peernamezgetpeername() failed on %r)
r1   ZgetsocknamerJ   errorAttributeErrorr   rB   r
   rh   Zgetpeername)r   r   r#   r#   r$   r   f  s    



z#_ProactorSocketTransport._set_extrac             C   s   dS )NTr#   )r   r#   r#   r$   rr   v  s    z&_ProactorSocketTransport.can_write_eofc             C   s2   | j s| jrd S d| _| jd kr.| jjtj d S )NT)r   r   r   r   rH   rJ   rn   )r   r#   r#   r$   rs   y  s
    
z"_ProactorSocketTransport.write_eof)NNN)r(   rM   rN   r   r   rr   rs   rO   r#   r#   )r"   r$   r}   \  s
    r}   c                   s   e Zd Z fddZd-ddZd.ddddddd	Zd/d
dZd0ddZd1d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d2d d!Zd"d# Zd3d%d&Zd'd( Zd)d* Zd+d, Z  ZS )4r   c                sH   t  j  tjd|jj || _|| _d | _i | _	|j
|  | j  d S )NzUsing proactor: %s)r   r   r
   rC   r"   r(   rX   	_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_transportF)server_sideserver_hostnamer    r!   c      
      C   s<   t j stdt j| |||||}	t| ||	||d |	jS )NzOProactor event loop requires Python 3.5 or newer (ssl.MemoryBIO) to support SSL)r    r!   )r   Z_is_sslproto_availabler|   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)r{   )r   r   r   r   r    r#   r#   r$   _make_duplex_pipe_transport  s    z1BaseProactorEventLoop._make_duplex_pipe_transportc             C   s   t | ||||S )N)rP   )r   r   r   r   r    r#   r#   r$   _make_read_pipe_transport  s    z/BaseProactorEventLoop._make_read_pipe_transportc             C   s   t | ||||S )N)ru   )r   r   r   r   r    r#   r#   r$   _make_write_pipe_transport  s    z0BaseProactorEventLoop._make_write_pipe_transportc                sP   | 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_runningrg   	is_closed_stop_accept_futures_close_self_piperX   r7   r   r   )r   )r"   r#   r$   r7     s    
zBaseProactorEventLoop.closec             C   s   | j j||S )N)rX   rY   )r   r   nr#   r#   r$   	sock_recv  s    zBaseProactorEventLoop.sock_recvc             C   s   | j j||S )N)rX   ro   )r   r   r`   r#   r#   r$   sock_sendall  s    z"BaseProactorEventLoop.sock_sendallc             C   s   | j j||S )N)rX   Zconnect)r   r   Zaddressr#   r#   r$   sock_connect  s    z"BaseProactorEventLoop.sock_connectc             C   s   | j j|S )N)rX   accept)r   r   r#   r#   r$   sock_accept  s    z!BaseProactorEventLoop.sock_acceptc             C   s   t d S )N)r|   )r   r#   r#   r$   _socketpair  s    z!BaseProactorEventLoop._socketpairc             C   sL   | 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   sF   | 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   y$|d k	r|j   | jj| jd}W nH tjk
r:   d S  tk
rl } z| jd|| d W Y d d }~X nX || _|j	| j
 d S )Ni   z.Error on reading from the event loop self pipe)r?   r@   r   )rW   rX   rY   r   r   r]   	ExceptionrD   r   r^   r   )r   rq   rF   r#   r#   r$   r     s    z(BaseProactorEventLoop._loop_self_readingc             C   s   | j jd d S )N    )r   ro   )r   r#   r#   r$   _write_to_self  s    z$BaseProactorEventLoop._write_to_selfd   c                s&   d fdd	 j   d S )Nc                s"  y| d k	rl| j  \}}jr,tjd||  }d k	rVj||dd|id nj||d|id j rxd S jj} W n~ t	k
r } zDj
 dkrjd|d j  njrtjd	dd
 W Y d d }~X n8 tjk
r   j  Y nX | jj
 < | j  d S )Nz#%r got a new connection from %r: %rTr~   )r   r    r!   )r    r!   r   zAccept failed on a socket)r?   r@   rJ   zAccept failed on socket %r)r>   )rW   Z_debugr
   rC   r   r   r   rX   r   r\   r*   rD   r7   r   r]   r   r^   )rq   ZconnZaddrr   rF   )r   protocol_factoryr   r!   r   r   r#   r$   r     s>    


z2BaseProactorEventLoop._start_serving.<locals>.loop)N)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   s*   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   rX   _stop_servingr7   )r   r   r#   r#   r$   r   )  s    z#BaseProactorEventLoop._stop_serving)NNN)N)NN)NN)NN)N)NNr   )r(   rM   rN   r   r   r   r   r   r   r7   r   r   r   r   r   r   r   r   r   r   r   r   r   rO   r#   r#   )r"   r$   r     s4   
 
 
 
 



()__all__rJ   r9    r   r   r   r   r   r	   logr
   Z_FlowControlMixinZBaseTransportr   ZReadTransportrP   ZWriteTransportra   ru   Z	Transportr{   r}   ZBaseEventLoopr   r#   r#   r#   r$   <module>   s0    MT
#