<!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>
a
    XC?h 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 g d¢Z
eedƒrde
 g d¢¡ eedƒr|e
 g d	¢¡ 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ƒr6G 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/d0„ d0e ƒZ#dS )1z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   ú1/opt/alt/python39/lib64/python3.9/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   s˜   | j  ¡  zvtƒ L}| | tj¡ | jsP| |¡}| jr:qP|rF|  ¡  |  	¡  q"W d   ƒ n1 sd0    Y  W d| _| j  
¡  nd| _| j  
¡  0 d S r   )r   ÚclearÚ_ServerSelectorÚregisterÚ	selectorsÚ
EVENT_READr   ÚselectÚ_handle_request_noblockÚservice_actionsÚset)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 u r| j}n| jd ur0t|| jƒ}|d urBtƒ | }tƒ t}| | tj¡ | 	|¡}|r||  
¡ W  d   ƒ S |d urX|tƒ  }|dk rX|  ¡ W  d   ƒ S qXW d   ƒ n1 sÂ0    Y  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y$   Y d S 0 |  ||¡r„z|  ||¡ W qŽ tyj   |  ||¡ |  |¡ Y qŽ   |  |¡ ‚ Y qŽ0 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 occurred 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$   -

	r   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0 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   s2   z|  tj¡ W n ty"   Y n0 |  |¡ 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   /

r   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   r   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 u rd S t| j ƒ| jkrrz t dd¡\}}| j  |¡ W q tyZ   | j  ¡  Y q tyn   Y qrY q0 q| j  	¡ D ]b}z.|rŠdntj
}t ||¡\}}| j  |¡ W q| tyÌ   | j  |¡ Y q| tyÜ   Y q|0 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 u rtƒ | _| j |¡ |  |¡ d S d}z^z|  ||¡ d}W n typ   |  ||¡ Y n0 W z|  	|¡ W t  
|¡ qÄt  
|¡ 0 n(z|  	|¡ W t  
|¡ nt  
|¡ 0 0 d S )NrY   r   )rh   r   re   r-   ÚaddrG   rD   r>   r?   r@   Ú_exit)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   #r   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>Š  ó    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   sP   z>z|   ||¡ W n ty0   |  ||¡ Y n0 W |  |¡ n|  |¡ 0 d S r!   )rD   r>   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   
r   c                   @   s   e Zd ZdS )r   N©rR   rS   rT   r   r   r   r   r   Á  r…   r   c                   @   s   e Zd ZdS )r   Nr   r   r   r   r   r   Â  r…   r   c                   @   s   e Zd ZdS )r   Nr   r   r   r   r   r   Ä  r…   r   c                   @   s   e Zd ZdS )r   Nr   r   r   r   r   r   Å  r…   r   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   r   c                   @   s   e Zd ZejZdS )r   Nr   r   r   r   r   r   Ì  s   r   c                   @   s   e Zd ZdS )r   Nr   r   r   r   r   r   Ï  r…   r   c                   @   s   e Zd ZdS )r   Nr   r   r   r   r   r   Ñ  r…   r   c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
r	   c                 C   s>   || _ || _|| _|  ¡  z|  ¡  W |  ¡  n
|  ¡  0 d S r!   )rB   rC   ÚserverÚsetupÚhandleÚfinish)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   
r	   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 u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   sD   | j js,z| j  ¡  W n tjy*   Y n0 | 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   r
   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   s>   | j  |¡ t|ƒ}|jW  d   ƒ S 1 s00    Y  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   r   )$Ú__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>{   sL   


 n~
X(.-