
    =Ogk                     t   	 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          re
                    g d            eed          re
                    g d	            eed
          rej        Znej        Z G d d          Z G d de          Z G d de          Z eed          r G d d          Z G d de          Z G d d          Z G d d          Z eed          r G d dee          Z G d dee          Z G d dee          Z G d d ee          Z eed          r: G d! d"e          Z G d# d$e          Z G d% d&ee          Z G d' d(ee          Z G d) d*          Z  G d+ d,e           Z! G d- d.e          Z" G d/ 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                   |    e Zd Z	 dZd Zd ZddZd Zd Zd Z	d	 Z
d
 Zd Zd Zd Zd Zd Zd Zd Zd Zd ZdS )r   Nc                 b    	 || _         || _        t          j                    | _        d| _        d S NF)server_addressRequestHandlerClass	threadingEvent_BaseServer__is_shut_down_BaseServer__shutdown_request)selfr   r   s      %/usr/lib64/python3.11/socketserver.py__init__zBaseServer.__init__   s3    =,#6 'o//"'    c                     	 d S N r!   s    r"   server_activatezBaseServer.server_activate       	
 	r$         ?c                    	 | j                                          	 t                      5 }|                    | t          j                   | j        sN|                    |          }| j        rn1|r|                                  | 	                                 | j        Nd d d            n# 1 swxY w Y   d| _        | j         
                                 d S # d| _        | j         
                                 w xY wr   )r   clear_ServerSelectorregister	selectors
EVENT_READr    select_handle_request_noblockservice_actionsset)r!   poll_intervalselectorreadys       r"   serve_foreverzBaseServer.serve_forever   sJ   	 	!!###	&
 !"" +h!!$	(<===1 +$OOM::E.  744666((*** 1 ++ + + + + + + + + + + + + + + ',D###%%%%% ',D###%%%%s/   C A6B, C ,B00C 3B04C "C;c                 H    	 d| _         | j                                         d S NT)r    r   waitr(   s    r"   shutdownzBaseServer.shutdown   s,    	 #'  """""r$   c                     	 d S r&   r'   r(   s    r"   r4   zBaseServer.service_actions   r*   r$   c                    	 | j                                         }|| j        }n| j        t          || j                  }|t	                      |z   }t                      5 }|                    | t          j                   	 |	                    |          }|r | 
                                cd d d            S |7|t	                      z
  }|dk     r |                                 cd d d            S q# 1 swxY w Y   d S )NTr   )socket
gettimeouttimeoutmintimer.   r/   r0   r1   r2   r3   handle_timeout)r!   rB   deadliner7   r8   s        r"   handle_requestzBaseServer.handle_request  sg   	 +((**?lGG\%'4<00Gvv'H  	9(dI$89999 00 97799	9 	9 	9 	9 	9 	9 	9 	9 *"*TVV"3"Q;;#'#6#6#8#8	9 	9 	9 	9 	9 	9 	9 	99	9 	9 	9 	9 	9 	9 	9 	9 	9 	9s   "AC5;,C54C55C9<C9c                    	 	 |                                  \  }}n# t          $ r Y d S w xY w|                     ||          rk	 |                     ||           d S # t          $ r/ |                     ||           |                     |           Y d S  |                     |            xY w|                     |           d S r&   )get_requestOSErrorverify_requestprocess_request	Exceptionhandle_errorshutdown_requestr!   requestclient_addresss      r"   r3   z"BaseServer._handle_request_noblock0  s    		&*&6&6&8&8#G^^ 	 	 	FF	w77 
	+$$Wn===== / / /!!'>:::%%g......%%g...!!'*****s    
))A 5B*B*c                     	 d S r&   r'   r(   s    r"   rE   zBaseServer.handle_timeoutG  s    	 	r$   c                     	 dS r;   r'   rP   s      r"   rK   zBaseServer.verify_requestN  s    	
 tr$   c                 ^    	 |                      ||           |                     |           d S r&   )finish_requestrO   rP   s      r"   rL   zBaseServer.process_requestV  s9    	
 	G^444g&&&&&r$   c                     	 d S r&   r'   r(   s    r"   server_closezBaseServer.server_close_  r*   r$   c                 6    	 |                      |||            d S r&   )r   rP   s      r"   rV   zBaseServer.finish_requestg  s#    F  .$?????r$   c                 2    	 |                      |           d S r&   close_requestr!   rQ   s     r"   rO   zBaseServer.shutdown_requestk  s    A7#####r$   c                     	 d S r&   r'   r]   s     r"   r\   zBaseServer.close_requesto  s
    7r$   c                     	 t          dt          j                   t          d|t          j                   dd l}|                                 t          dt          j                   d S )Nz(----------------------------------------)filez4Exception occurred during processing of request fromr   )printsysstderr	traceback	print_exc)r!   rQ   rR   rd   s       r"   rN   zBaseServer.handle_errors  sx    	
 	f3:&&&&D	- 	- 	- 	-f3:&&&&&&r$   c                     | S r&   r'   r(   s    r"   	__enter__zBaseServer.__enter__  s    r$   c                 .    |                                   d S r&   )rX   )r!   argss     r"   __exit__zBaseServer.__exit__  s    r$   )r+   )__name__
__module____qualname__rB   r#   r)   r9   r=   r4   rG   r3   rE   rK   rL   rX   rV   rO   r\   rN   rg   rj   r'   r$   r"   r   r      s(       *X G( ( (  & & & &:# # #  &9 9 9<+ + +.    ' ' '  @ @ @$ $ $  ' ' '      r$   r   c                   j    e Zd Z	 ej        Zej        ZdZdZ	dZ
ddZd Zd Zd Zd Zd	 Zd
 Zd ZdS )r      FTc                    	 t                               | ||           t          j        | j        | j                  | _        |rE	 |                                  |                                  d S #  |                                   xY wd S r&   )r   r#   r@   address_familysocket_typeserver_bindr)   rX   )r!   r   r   bind_and_activates       r"   r#   zTCPServer.__init__  s    =D.2EFFFmD$7$($46 6 	  """$$&&&&&!!###	 	s   (A/ /Bc                    	 | j         rEt          t          d          r0| j                            t          j        t          j        d           | j        rEt          t          d          r0| j                            t          j        t          j        d           | j                            | j	                   | j        
                                | _	        d S )NSO_REUSEADDR   SO_REUSEPORT)allow_reuse_addresshasattrr@   
setsockopt
SOL_SOCKETrv   allow_reuse_portrx   bindr   getsocknamer(   s    r"   rs   zTCPServer.server_bind  s    	
 # 	N(G(G 	NK""6#4f6I1MMM  	NWV^%D%D 	NK""6#4f6I1MMM,---"k5577r$   c                 F    	 | j                             | j                   d S r&   )r@   listenrequest_queue_sizer(   s    r"   r)   zTCPServer.server_activate  s(    	
 	4233333r$   c                 :    	 | j                                          d S r&   )r@   closer(   s    r"   rX   zTCPServer.server_close  s#    	
 	r$   c                 6    	 | j                                         S r&   )r@   filenor(   s    r"   r   zTCPServer.fileno      	
 {!!###r$   c                 6    	 | j                                         S r&   )r@   acceptr(   s    r"   rI   zTCPServer.get_request  r   r$   c                     	 	 |                     t          j                   n# t          $ r Y nw xY w|                     |           d S r&   )r=   r@   SHUT_WRrJ   r\   r]   s     r"   rO   zTCPServer.shutdown_request  s_    A	 V^,,,, 	 	 	D	7#####s   # 
00c                 0    	 |                                  d S r&   )r   r]   s     r"   r\   zTCPServer.close_request  s    7r$   N)T)rk   rl   rm   r@   AF_INETrq   SOCK_STREAMrr   r   ry   r}   r#   rs   r)   rX   r   rI   rO   r\   r'   r$   r"   r   r     s        ,\ ^N$K   8 8 84 4 4  $ $ $$ $ $$ $ $    r$   r   c                   B    e Zd Z	 dZdZej        ZdZd Z	d Z
d Zd ZdS )r   Fi    c                 \    | j                             | j                  \  }}|| j         f|fS r&   )r@   recvfrommax_packet_size)r!   dataclient_addrs      r"   rI   zUDPServer.get_request  s1     K001EFFkdk"K//r$   c                     d S r&   r'   r(   s    r"   r)   zUDPServer.server_activate      r$   c                 0    |                      |           d S r&   r[   r]   s     r"   rO   zUDPServer.shutdown_request  s    7#####r$   c                     d S r&   r'   r]   s     r"   r\   zUDPServer.close_request"  r   r$   N)rk   rl   rm   ry   r}   r@   
SOCK_DGRAMrr   r   rI   r)   rO   r\   r'   r$   r"   r   r   
  sl        #KO0 0 0  $ $ $    r$   r   c                   N     e Zd Z	 dZdZdZdZdddZd Zd	 Z	d
 Z
 fdZ xZS )r   i,  N(   TFblockingc                   	 | j         d S t          | j                   | j        k    r	 t          j        dd          \  }}| j                             |           n4# t          $ r | j                                          Y nt          $ r Y n!w xY wt          | j                   | j        k    | j         	                                D ]z}	 |rdnt          j
        }t          j        ||          \  }}| j                             |           F# t          $ r | j                             |           Y lt          $ r Y ww xY wd S )Nr   )active_childrenlenmax_childrenoswaitpiddiscardChildProcessErrorr-   rJ   copyWNOHANG)r!   r   pid_flagss        r"   collect_childrenzForkingMixIn.collect_children0  s   I#+ d*++t/@@@ZA..FC(005555( 1 1 1(..00000   E d*++t/@@@ +0022  
!)9AArzEZU33FC (005555( 6 6 6(0055555   D s0   2A #B	BB	AD$D>2	D>=D>c                 0    	 |                                   d S r&   r   r(   s    r"   rE   zForkingMixIn.handle_timeoutS  !     !!#####r$   c                 0    	 |                                   d S r&   r   r(   s    r"   r4   zForkingMixIn.service_actionsZ  r   r$   c                 b   	 t          j                    }|rK| j        t                      | _        | j                            |           |                     |           d S d}	 |                     ||           d}n&# t          $ r |                     ||           Y nw xY w	 | 	                    |           t          j
        |           d S # t          j
        |           w xY w# 	 | 	                    |           t          j
        |           w # t          j
        |           w xY wxY w)Nrw   r   )r   r   r   r5   addr\   rV   rM   rN   rO   _exit)r!   rQ   rR   r   statuss        r"   rL   zForkingMixIn.process_requesta  sH   ?'))C )'/+.55D($((---""7+++ 	)''@@@FF  ? ? ?%%g~>>>>>?)--g666((((((((()--g666((((((((sN   %A> =C) > B!C)  B!!C) %C C&)D.+D D.D++D.c                 ~    t                                                       |                     | j                   d S )Nr   )superrX   r   block_on_closer!   	__class__s    r"   rX   zForkingMixIn.server_closez  s9    GG  """!!4+>!?????r$   )rk   rl   rm   rB   r   r   r   r   rE   r4   rL   rX   __classcell__r   s   @r"   r   r   '  s        C/4 !	 !	 !	 !	 !	F	$ 	$ 	$	$ 	$ 	$	) 	) 	)2	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@r$   r   c                   2     e Zd Z	  fdZd Zd Zd Z xZS )_Threadsc                     |                                   |j        rd S t                                          |           d S r&   )reapdaemonr   append)r!   threadr   s     r"   r   z_Threads.append  s;    		= 	Fvr$   c                 *    g | d d          c| d d <   }|S r&   r'   )r!   results     r"   pop_allz_Threads.pop_all  s"    d111gQQQr$   c                 \    |                                  D ]}|                                 d S r&   )r   joinr!   r   s     r"   r   z_Threads.join  s2    llnn 	 	FKKMMMM	 	r$   c                 (    d | D             | d d <   d S )Nc              3   B   K   | ]}|                                 |V  d S r&   )is_alive).0r   s     r"   	<genexpr>z _Threads.reap.<locals>.<genexpr>  s1      BBf0A0AB6BBBBBBr$   r'   r(   s    r"   r   z_Threads.reap  s!    BBBBBQQQr$   )rk   rl   rm   r   r   r   r   r   r   s   @r"   r   r     sq                C C C C C C Cr$   r   c                       e Zd Z	 d Zd ZdS )
_NoThreadsc                     d S r&   r'   r   s     r"   r   z_NoThreads.append      r$   c                     d S r&   r'   r(   s    r"   r   z_NoThreads.join  r   r$   N)rk   rl   rm   r   r   r'   r$   r"   r   r     s7              r$   r   c                   H     e Zd Z	 dZdZ e            Zd Zd Z fdZ	 xZ
S )r   FTc                     	 	 |                      ||           n&# t          $ r |                     ||           Y nw xY w|                     |           d S # |                     |           w xY wr&   )rV   rM   rN   rO   rP   s      r"   process_request_threadz%ThreadingMixIn.process_request_thread  s    	
	+8888 	7 	7 	7g~66666	7 !!'*****D!!'****s!    A  =A =A A.c                 "   	 | j         r/t          |                               dt                                 t	          j        | j        ||f          }| j        |_        | j	        
                    |           |                                 d S )N_threads)targetri   )r   vars
setdefaultr   r   Threadr   daemon_threadsr   r   r   start)r!   rQ   rR   ts       r"   rL   zThreadingMixIn.process_request  s    8 	:JJ!!*hjj999d&A%,n$=? ? ?&Q						r$   c                 z    t                                                       | j                                         d S r&   )r   rX   r   r   r   s    r"   rX   zThreadingMixIn.server_close  s3    r$   )rk   rl   rm   r   r   r   r   r   rL   rX   r   r   s   @r"   r   r     sr        > NN z||H+ + +          r$   r   c                       e Zd ZdS )r   Nrk   rl   rm   r'   r$   r"   r   r               r$   r   c                       e Zd ZdS )r   Nr   r'   r$   r"   r   r     r   r$   r   c                       e Zd ZdS )r   Nr   r'   r$   r"   r   r     r   r$   r   c                       e Zd ZdS )r	   Nr   r'   r$   r"   r	   r	     r   r$   r	   c                       e Zd Zej        ZdS )r   Nrk   rl   rm   r@   r   rq   r'   r$   r"   r   r             r$   r   c                       e Zd Zej        ZdS )r   Nr   r'   r$   r"   r   r     r   r$   r   c                       e Zd ZdS )r   Nr   r'   r$   r"   r   r     r   r$   r   c                       e Zd ZdS )r   Nr   r'   r$   r"   r   r     r   r$   r   c                   (    e Zd Z	 d Zd Zd Zd ZdS )r
   c                     || _         || _        || _        |                                  	 |                                  |                                  d S # |                                  w xY wr&   )rQ   rR   serversetuphandlefinish)r!   rQ   rR   r   s       r"   r#   zBaseRequestHandler.__init__  sZ    ,

	KKMMMKKMMMMMDKKMMMMs   A A+c                     d S r&   r'   r(   s    r"   r   zBaseRequestHandler.setup  r   r$   c                     d S r&   r'   r(   s    r"   r   zBaseRequestHandler.handle  r   r$   c                     d S r&   r'   r(   s    r"   r   zBaseRequestHandler.finish  r   r$   N)rk   rl   rm   r#   r   r   r   r'   r$   r"   r
   r
     sU                   r$   r
   c                   ,    e Zd Z	 dZdZdZdZd Zd ZdS )r   r   r   NFc                    | j         | _        | j        | j                            | j                   | j        r0| j                            t          j        t          j        d           | j        	                    d| j
                  | _        | j        dk    rt          | j                  | _        d S | j        	                    d| j                  | _        d S )NTrbr   wb)rQ   
connectionrB   
settimeoutdisable_nagle_algorithmr{   r@   IPPROTO_TCPTCP_NODELAYmakefilerbufsizerfilewbufsize_SocketWriterwfiler(   s    r"   r   zStreamRequestHandler.setup  s    ,<#O&&t|444' 	AO&&v'9'-'94A A A_--dDMBB
=A&t77DJJJ11$FFDJJJr$   c                     | j         j        s0	 | j                                          n# t          j        $ r Y nw xY w| j                                          | j                                         d S r&   )r  closedflushr@   errorr   r   r(   s    r"   r   zStreamRequestHandler.finish+  s    z  	
  """"<     	

s   ( ::)	rk   rl   rm   r   r  rB   r   r   r   r'   r$   r"   r   r   	  sS        > HH G $G G G	 	 	 	 	r$   r   c                   (    e Zd Z	 d Zd Zd Zd ZdS )r  c                     || _         d S r&   )_sock)r!   socks     r"   r#   z_SocketWriter.__init__;  s    


r$   c                     dS r;   r'   r(   s    r"   writablez_SocketWriter.writable>  s    tr$   c                     | j                             |           t          |          5 }|j        cd d d            S # 1 swxY w Y   d S r&   )r
  sendall
memoryviewnbytes)r!   bviews      r"   writez_SocketWriter.writeA  s    
1]] 	d;	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   >AAc                 4    | j                                         S r&   )r
  r   r(   s    r"   r   z_SocketWriter.filenoF  s    z  """r$   N)rk   rl   rm   r#   r  r  r   r'   r$   r"   r  r  6  sV        J      
# # # # #r$   r  c                       e Zd Z	 d Zd ZdS )r   c                     ddl m} | j        \  | _        | _         || j                  | _         |            | _        d S )Nr   )BytesIO)ior  rQ   packetr@   r   r  )r!   r  s     r"   r   zDatagramRequestHandler.setupM  sH    #'< T[WT[))
WYY


r$   c                 t    | j                             | j                                        | j                   d S r&   )r@   sendtor  getvaluerR   r(   s    r"   r   zDatagramRequestHandler.finishS  s1    4:..00$2EFFFFFr$   N)rk   rl   rm   r   r   r'   r$   r"   r   r   I  s:        @  G G G G Gr$   r   )$__version__r@   r0   r   rb   r   r  r   rD   r   __all__rz   extendr   r.   SelectSelectorr   r   r   r   listr   r   r   r   r   r   r	   r   r   r   r   r
   r   r  r   r'   r$   r"   <module>r#     sZ  vt       				 



           " " " " " "7 7 7 72v LNNJJJKKK
769 4NN 3 3 3 4 4 4 79n%% /,OO.Ok k k k k k k k\@ @ @ @ @
 @ @ @F    	   8 72v V@U@ U@ U@ U@ U@ U@ U@ U@pC C C C Ct C C C,       % % % % % % % %P 72v :99999<99999999<999 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9
769 
P( ( ( ( (9 ( ( (( ( ( ( (Y ( ( ( LKKKKN4DKKKOOOOOn6HOOO# # # # # # # #\+ + + + +- + + +Z# # # # #N # # #&G G G G G/ G G G G Gr$   