???<!-- GIF89;a -->
123123123123
.....................................................................................................................................???<!-- GIF89;a -->
123123123123
.....................................................................................................................................U
    e5d j  ã                	   @   s   d Z ddlZddlZddlZddlZddlZddlmZ ddlm	Z ddddd	d
dddg	Z
eedƒrte
 dddg¡ eedƒre
 ddddg¡ eedƒr¢ejZnejZG dd„ dƒZG dd„ deƒZG dd„ deƒZeedƒrîG dd„ dƒZG dd„ deƒZG dd„ dƒZG d d„ dƒZeedƒrJG d!d„ deeƒZG d"d„ deeƒZG d#d„ deeƒZG d$d	„ d	eeƒZeedƒr¾G d%d„ deƒZG d&d„ deƒZG d'd„ deeƒZG d(d„ deeƒZG d)d
„ d
ƒZ G d*d„ de ƒZ!G d+d,„ d,eƒZ"G d-d„ de ƒZ#dS ).z0.4é    N)ÚBufferedIOBase)Ú	monotonicÚ
BaseServerÚ	TCPServerÚ	UDPServerÚThreadingUDPServerÚThreadingTCPServerÚBaseRequestHandlerÚStreamRequestHandlerÚDatagramRequestHandlerÚThreadingMixInÚforkÚForkingUDPServerÚForkingTCPServerÚForkingMixInÚAF_UNIXÚUnixStreamServerÚUnixDatagramServerÚThreadingUnixStreamServerÚThreadingUnixDatagramServerÚPollSelectorc                   @   sš   e Zd ZdZdd„ Zdd„ Zd%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„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ ZdS )&r   Nc                 C   s    || _ || _t ¡ | _d| _d S ©NF)Úserver_addressÚRequestHandlerClassÚ	threadingZEventÚ_BaseServer__is_shut_downÚ_BaseServer__shutdown_request)Úselfr   r   © r   ú$/usr/lib64/python3.8/socketserver.pyÚ__init__È   s    
zBaseServer.__init__c                 C   s   d S ©Nr   ©r   r   r   r   Úserver_activateÏ   s    zBaseServer.server_activateç      à?c              	   C   st   | j  ¡  zRtƒ B}| | tj¡ | jsP| |¡}| jr:qP|rF|  	¡  |  
¡  q"W 5 Q R X W 5 d| _| j  ¡  X d S r   )r   Úclearr   ÚsetÚ_ServerSelectorÚregisterÚ	selectorsÚ
EVENT_READÚselectÚ_handle_request_noblockÚservice_actions)r   Zpoll_intervalÚselectorÚreadyr   r   r   Úserve_forever×   s    

zBaseServer.serve_foreverc                 C   s   d| _ | j ¡  d S ©NT)r   r   Úwaitr"   r   r   r   Úshutdownô   s    zBaseServer.shutdownc                 C   s   d S r!   r   r"   r   r   r   r-   þ   s    zBaseServer.service_actionsc              
   C   s¸   | j  ¡ }|d kr| j}n| jd k	r0t|| jƒ}|d k	rBtƒ | }tƒ f}| | tj¡ | 	|¡}|rz|  
¡ W  5 Q R £ S |d k	rX|tƒ  }|dk rX|  ¡ W  5 Q R £ S qXW 5 Q R X d S )Nr   )ÚsocketZ
gettimeoutÚtimeoutÚminÚtimer'   r(   r)   r*   r+   r,   Úhandle_timeout)r   r5   Zdeadliner.   r/   r   r   r   Úhandle_request  s     




zBaseServer.handle_requestc                 C   s–   z|   ¡ \}}W n tk
r&   Y d S X |  ||¡rˆz|  ||¡ W q’ tk
rn   |  ||¡ |  |¡ Y q’   |  |¡ ‚ Y q’X n
|  |¡ d S r!   )Úget_requestÚOSErrorÚverify_requestÚprocess_requestÚ	ExceptionÚhandle_errorÚshutdown_request©r   ÚrequestÚclient_addressr   r   r   r,   /  s    

z"BaseServer._handle_request_noblockc                 C   s   d S r!   r   r"   r   r   r   r8   F  s    zBaseServer.handle_timeoutc                 C   s   dS r1   r   rA   r   r   r   r<   M  s    zBaseServer.verify_requestc                 C   s   |   ||¡ |  |¡ d S r!   )Úfinish_requestr@   rA   r   r   r   r=   U  s    zBaseServer.process_requestc                 C   s   d S r!   r   r"   r   r   r   Úserver_close^  s    zBaseServer.server_closec                 C   s   |   ||| ¡ d S r!   )r   rA   r   r   r   rD   f  s    zBaseServer.finish_requestc                 C   s   |   |¡ d S r!   ©Úclose_request©r   rB   r   r   r   r@   j  s    zBaseServer.shutdown_requestc                 C   s   d S r!   r   rH   r   r   r   rG   n  s    zBaseServer.close_requestc                 C   s@   t dtjd t d|tjd dd l}| ¡  t dtjd d S )Nz(----------------------------------------)Úfilez4Exception happened during processing of request fromr   )ÚprintÚsysÚstderrÚ	tracebackÚ	print_exc)r   rB   rC   rM   r   r   r   r?   r  s     ÿzBaseServer.handle_errorc                 C   s   | S r!   r   r"   r   r   r   Ú	__enter__  s    zBaseServer.__enter__c                 G   s   |   ¡  d S r!   )rE   )r   Úargsr   r   r   Ú__exit__‚  s    zBaseServer.__exit__)r$   )Ú__name__Ú
__module__Ú__qualname__r5   r    r#   r0   r3   r-   r9   r,   r8   r<   r=   rE   rD   r@   rG   r?   rO   rQ   r   r   r   r   r   ™   s$   -

	c                   @   sb   e Zd ZejZejZdZdZ	d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S )r   é   FTc                 C   sT   t  | ||¡ t | j| j¡| _|rPz|  ¡  |  ¡  W n   |  ¡  ‚ Y nX d S r!   )r   r    r4   Úaddress_familyÚsocket_typeÚserver_bindr#   rE   )r   r   r   Zbind_and_activater   r   r   r    ½  s    ÿzTCPServer.__init__c                 C   s8   | j r| j tjtjd¡ | j | j¡ | j ¡ | _d S )Né   )Úallow_reuse_addressr4   Ú
setsockoptZ
SOL_SOCKETZSO_REUSEADDRZbindr   Zgetsocknamer"   r   r   r   rX   Ê  s    zTCPServer.server_bindc                 C   s   | j  | j¡ d S r!   )r4   ZlistenÚrequest_queue_sizer"   r   r   r   r#   Õ  s    zTCPServer.server_activatec                 C   s   | j  ¡  d S r!   )r4   Úcloser"   r   r   r   rE   Ý  s    zTCPServer.server_closec                 C   s
   | j  ¡ S r!   )r4   Úfilenor"   r   r   r   r^   å  s    zTCPServer.filenoc                 C   s
   | j  ¡ S r!   )r4   Zacceptr"   r   r   r   r:   í  s    zTCPServer.get_requestc                 C   s4   z|  tj¡ W n tk
r$   Y nX |  |¡ d S r!   )r3   r4   ZSHUT_WRr;   rG   rH   r   r   r   r@   õ  s
    zTCPServer.shutdown_requestc                 C   s   |  ¡  d S r!   )r]   rH   r   r   r   rG   ÿ  s    zTCPServer.close_requestN)T)rR   rS   rT   r4   ZAF_INETrV   ZSOCK_STREAMrW   r\   rZ   r    rX   r#   rE   r^   r:   r@   rG   r   r   r   r   r   †  s   /

c                   @   s:   e Zd ZdZejZdZdd„ Zdd„ Z	dd„ Z
d	d
„ ZdS )r   Fi    c                 C   s    | j  | j¡\}}|| j f|fS r!   )r4   ZrecvfromÚmax_packet_size)r   ÚdataZclient_addrr   r   r   r:     s    zUDPServer.get_requestc                 C   s   d S r!   r   r"   r   r   r   r#     s    zUDPServer.server_activatec                 C   s   |   |¡ d S r!   rF   rH   r   r   r   r@     s    zUDPServer.shutdown_requestc                 C   s   d S r!   r   rH   r   r   r   rG     s    zUDPServer.close_requestN)rR   rS   rT   rZ   r4   Z
SOCK_DGRAMrW   r_   r:   r#   r@   rG   r   r   r   r   r     s   c                       sR   e Zd ZdZdZdZdZddœdd„Zd	d
„ Zdd„ Z	dd„ Z
‡ fdd„Z‡  ZS )r   i,  Né(   TF©Úblockingc             	   C   sì   | j d krd S t| j ƒ| jkrvz t dd¡\}}| j  |¡ W q tk
r\   | j  ¡  Y q tk
rr   Y qvY qX q| j  	¡ D ]f}z.|rŽdntj
}t ||¡\}}| j  |¡ W q€ tk
rÒ   | j  |¡ Y q€ tk
rä   Y q€X q€d S )Néÿÿÿÿr   )Úactive_childrenÚlenÚmax_childrenÚosÚwaitpidÚdiscardÚChildProcessErrorr%   r;   ÚcopyÚWNOHANG)r   rc   ÚpidÚ_Úflagsr   r   r   Úcollect_children(  s&    
zForkingMixIn.collect_childrenc                 C   s   |   ¡  d S r!   ©rq   r"   r   r   r   r8   K  s    zForkingMixIn.handle_timeoutc                 C   s   |   ¡  d S r!   rr   r"   r   r   r   r-   R  s    zForkingMixIn.service_actionsc                 C   sš   t  ¡ }|r8| jd krtƒ | _| j |¡ |  |¡ d S d}z:z|  ||¡ d}W n  t	k
rr   |  
||¡ Y nX W 5 z|  |¡ W 5 t  |¡ X X d S )NrY   r   )rh   r   re   r&   ÚaddrG   Ú_exitr@   rD   r>   r?   )r   rB   rC   rn   Zstatusr   r   r   r=   Y  s     

zForkingMixIn.process_requestc                    s   t ƒ  ¡  | j| jd d S )Nrb   )ÚsuperrE   rq   Úblock_on_closer"   ©Ú	__class__r   r   rE   r  s    
zForkingMixIn.server_close)rR   rS   rT   r5   re   rg   rv   rq   r8   r-   r=   rE   Ú__classcell__r   r   rw   r   r     s   #c                       s4   e Zd Z‡ fdd„Zdd„ Zdd„ Zdd„ Z‡  ZS )	Ú_Threadsc                    s"   |   ¡  |jrd S tƒ  |¡ d S r!   )ÚreapÚdaemonru   Úappend©r   Úthreadrw   r   r   r}   {  s    z_Threads.appendc                 C   s   g | d d …  | d d …< }|S r!   r   )r   Úresultr   r   r   Úpop_all  s    z_Threads.pop_allc                 C   s   |   ¡ D ]}| ¡  qd S r!   )r   Újoinr~   r   r   r   r‚   …  s    z_Threads.joinc                 C   s   dd„ | D ƒ| d d …< d S )Nc                 s   s   | ]}|  ¡ r|V  qd S r!   )Zis_alive)Ú.0r   r   r   r   Ú	<genexpr>Š  s      z _Threads.reap.<locals>.<genexpr>r   r"   r   r   r   r{   ‰  s    z_Threads.reap)rR   rS   rT   r}   r   r‚   r{   ry   r   r   rw   r   rz   w  s   rz   c                   @   s   e Zd Zdd„ Zdd„ ZdS )Ú
_NoThreadsc                 C   s   d S r!   r   r~   r   r   r   r}   ‘  s    z_NoThreads.appendc                 C   s   d S r!   r   r"   r   r   r   r‚   ”  s    z_NoThreads.joinN)rR   rS   rT   r}   r‚   r   r   r   r   r…     s   r…   c                       s:   e Zd ZdZdZeƒ Zdd„ Zdd„ Z‡ fdd„Z	‡  Z
S )	r   FTc              	   C   sH   z6z|  ||¡ W n  tk
r2   |  ||¡ Y nX W 5 |   |¡ X d S r!   )r@   rD   r>   r?   rA   r   r   r   Úprocess_request_thread¤  s
    z%ThreadingMixIn.process_request_threadc                 C   sL   | j rt| ƒ dtƒ ¡ tj| j||fd}| j|_| j	 
|¡ | ¡  d S )NÚ_threads)ÚtargetrP   )rv   ÚvarsÚ
setdefaultrz   r   ZThreadr†   Údaemon_threadsr|   r‡   r}   Ústart)r   rB   rC   Útr   r   r   r=   ±  s    ÿzThreadingMixIn.process_requestc                    s   t ƒ  ¡  | j ¡  d S r!   )ru   rE   r‡   r‚   r"   rw   r   r   rE   »  s    
zThreadingMixIn.server_close)rR   rS   rT   r‹   rv   r…   r‡   r†   r=   rE   ry   r   r   rw   r   r   ˜  s   
c                   @   s   e Zd ZdS )r   N©rR   rS   rT   r   r   r   r   r   Á  s    c                   @   s   e Zd ZdS )r   NrŽ   r   r   r   r   r   Â  s    c                   @   s   e Zd ZdS )r   NrŽ   r   r   r   r   r   Ä  s    c                   @   s   e Zd ZdS )r   NrŽ   r   r   r   r   r   Å  s    c                   @   s   e Zd ZejZdS )r   N©rR   rS   rT   r4   r   rV   r   r   r   r   r   É  s   c                   @   s   e Zd ZejZdS )r   Nr   r   r   r   r   r   Ì  s   c                   @   s   e Zd ZdS )r   NrŽ   r   r   r   r   r   Ï  s    c                   @   s   e Zd ZdS )r   NrŽ   r   r   r   r   r   Ñ  s    c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
r	   c                 C   s6   || _ || _|| _|  ¡  z|  ¡  W 5 |  ¡  X d S r!   )rB   rC   ÚserverÚsetupÚfinishÚhandle)r   rB   rC   r   r   r   r   r    å  s    zBaseRequestHandler.__init__c                 C   s   d S r!   r   r"   r   r   r   r‘   ï  s    zBaseRequestHandler.setupc                 C   s   d S r!   r   r"   r   r   r   r“   ò  s    zBaseRequestHandler.handlec                 C   s   d S r!   r   r"   r   r   r   r’   õ  s    zBaseRequestHandler.finishN)rR   rS   rT   r    r‘   r“   r’   r   r   r   r   r	   Ó  s   
c                   @   s,   e Zd ZdZdZdZdZdd„ Zdd„ ZdS )	r
   rd   r   NFc                 C   sz   | j | _| jd k	r | j | j¡ | jr:| j tjtjd¡ | j 	d| j
¡| _| jdkrdt| jƒ| _n| j 	d| j¡| _d S )NTÚrbr   Úwb)rB   Z
connectionr5   Z
settimeoutÚdisable_nagle_algorithmr[   r4   ZIPPROTO_TCPZTCP_NODELAYZmakefileÚrbufsizeÚrfileÚwbufsizeÚ_SocketWriterÚwfiler"   r   r   r   r‘     s    

 ÿ
zStreamRequestHandler.setupc                 C   sF   | j js.z| j  ¡  W n tjk
r,   Y nX | j  ¡  | j ¡  d S r!   )r›   ÚclosedÚflushr4   Úerrorr]   r˜   r"   r   r   r   r’   #  s    
zStreamRequestHandler.finish)	rR   rS   rT   r—   r™   r5   r–   r‘   r’   r   r   r   r   r
     s   c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
rš   c                 C   s
   || _ d S r!   )Ú_sock)r   Zsockr   r   r   r    3  s    z_SocketWriter.__init__c                 C   s   dS r1   r   r"   r   r   r   Úwritable6  s    z_SocketWriter.writablec              
   C   s2   | j  |¡ t|ƒ}|jW  5 Q R £ S Q R X d S r!   )rŸ   ZsendallÚ
memoryviewÚnbytes)r   ÚbZviewr   r   r   Úwrite9  s    
z_SocketWriter.writec                 C   s
   | j  ¡ S r!   )rŸ   r^   r"   r   r   r   r^   >  s    z_SocketWriter.filenoN)rR   rS   rT   r    r    r¤   r^   r   r   r   r   rš   .  s   rš   c                   @   s   e Zd Zdd„ Zdd„ ZdS )r   c                 C   s2   ddl m} | j\| _| _|| jƒ| _|ƒ | _d S )Nr   )ÚBytesIO)Úior¥   rB   Zpacketr4   r˜   r›   )r   r¥   r   r   r   r‘   E  s    zDatagramRequestHandler.setupc                 C   s   | j  | j ¡ | j¡ d S r!   )r4   Zsendtor›   ÚgetvaluerC   r"   r   r   r   r’   K  s    zDatagramRequestHandler.finishN)rR   rS   rT   r‘   r’   r   r   r   r   r   A  s   )$Ú__version__r4   r)   rh   rK   r   r¦   r   r7   r   Ú__all__ÚhasattrÚextendr   r'   ZSelectSelectorr   r   r   r   Úlistrz   r…   r   r   r   r   r   r   r   r   r   r	   r
   rš   r   r   r   r   r   Ú<module>{   s`      ý

þ
 n~
X(.-