
    z%il                     Z   	 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
j                  g d        eed      r/e
j                  g d	        eed      re
j                  d
dg        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      rO G d# d$e      Z G d% d&e      Z G d' d(ee      Z G d) d*ee      Z eed      r G d+ d
ee      Z  G d, dee      Z! G d- d.      Z" G d/ d0e"      Z# G d1 d2e      Z$ G d3 d4e"      Z%y)5z0.4    N)BufferedIOBase)	monotonic)	
BaseServer	TCPServer	UDPServerThreadingUDPServerThreadingTCPServerBaseRequestHandlerStreamRequestHandlerDatagramRequestHandlerThreadingMixInfork)ForkingUDPServerForkingTCPServerForkingMixInAF_UNIX)UnixStreamServerUnixDatagramServerThreadingUnixStreamServerThreadingUnixDatagramServerForkingUnixStreamServerForkingUnixDatagramServerPollSelectorc                   z    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y)r   Nc                 b    	 || _         || _        t        j                         | _        d| _        y NF)server_addressRequestHandlerClass	threadingEvent_BaseServer__is_shut_down_BaseServer__shutdown_request)selfr   r   s      @/home/uftp/.pyenv/versions/3.12.0/lib/python3.12/socketserver.py__init__zBaseServer.__init__   s,    =,#6 'oo/"'    c                      	 y N r#   s    r$   server_activatezBaseServer.server_activate       	
 	r&   c                    	 | j                   j                          	 t               5 }|j                  | t        j
                         | j                  sM|j                  |      }| j                  rn/|r| j                          | j                          | j                  sMd d d        d| _        | j                   j                          y # 1 sw Y   +xY w# d| _        | j                   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   s    	 	!!#	&
 !" +h!!$	(<(<=11$OOM:E..446((* 11+ ',D###%+ + ',D###%s#   
C A9C!C CC #C:c                 H    	 d| _         | j                  j                          y NT)r"   r!   waitr*   s    r$   shutdownzBaseServer.shutdown   s#    	 #'  "r&   c                      	 y r(   r)   r*   s    r$   r5   zBaseServer.service_actions  r,   r&   c                    	 | j                   j                         }|| j                  }n"| j                  t        || j                        }|t	               |z   }t               5 }|j                  | t        j                         	 |j                  |      r| j                         cd d d        S |+t	               z
  }|dk  r| j                         cd d d        S X# 1 sw Y   y xY w)Nr   )socket
gettimeouttimeoutmintimer/   r0   r1   r2   r3   r4   handle_timeout)r#   rC   deadliner8   s       r$   handle_requestzBaseServer.handle_request  s    	 ++((*?llG\\%'4<<0Gv'H  
	9(dI$8$89??7+779
	9 
	9 *"*TV"3"Q;#'#6#6#8
	9 
	9 
	9 
	9s   &AC 2#C C  C)c                 B   	 	 | j                         \  }}| j                  ||      r	 | j                  ||       y | j                  |       y # t        $ r Y y w xY w# t        $ r& | j                  ||       | j                  |       Y y  | j                  |        xY wr(   )get_requestOSErrorverify_requestprocess_request	Exceptionhandle_errorshutdown_requestr#   requestclient_addresss      r$   r4   z"BaseServer._handle_request_noblock1  s    		&*&6&6&8#G^ w7$$Wn= !!'*  		
  /!!'>:%%g.%%g.s"   A A 	AA,BBc                      	 y r(   r)   r*   s    r$   rF   zBaseServer.handle_timeoutH  s    	 	r&   c                      	 yr<   r)   rQ   s      r$   rL   zBaseServer.verify_requestO  s    	
 r&   c                 L    	 | j                  ||       | j                  |       y r(   )finish_requestrP   rQ   s      r$   rM   zBaseServer.process_requestW  s'    	
 	G^4g&r&   c                      	 y r(   r)   r*   s    r$   server_closezBaseServer.server_close`  r,   r&   c                 ,    	 | j                  |||        y r(   )r   rQ   s      r$   rW   zBaseServer.finish_requesth  s    F  .$?r&   c                 (    	 | j                  |       y r(   close_requestr#   rR   s     r$   rP   zBaseServer.shutdown_requestl  s    A7#r&   c                      	 y r(   r)   r^   s     r$   r]   zBaseServer.close_requestp  s    7r&   c                     	 t        dt        j                         t        d|t        j                         dd l}|j	                          t        dt        j                         y )Nz(----------------------------------------)filez4Exception occurred during processing of request fromr   )printsysstderr	traceback	print_exc)r#   rR   rS   re   s       r$   rO   zBaseServer.handle_errort  sH    	
 	f3::&D	-f3::&r&   c                     | S r(   r)   r*   s    r$   	__enter__zBaseServer.__enter__  s    r&   c                 $    | j                          y r(   )rY   )r#   argss     r$   __exit__zBaseServer.__exit__  s    r&   )g      ?)__name__
__module____qualname__rC   r%   r+   r:   r>   r5   rH   r4   rF   rL   rM   rY   rW   rP   r]   rO   rh   rk   r)   r&   r$   r   r      se    *X G(&:#&9:+.'@$'r&   r   c                   |    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y)r      Fc                    	 t         j                  | ||       t        j                  | j                  | j                        | _        |r"	 | j                          | j                          y y #  | j                           xY wr(   )r   r%   rA   address_familysocket_typeserver_bindr+   rY   )r#   r   r   bind_and_activates       r$   r%   zTCPServer.__init__  st    =D.2EFmmD$7$7$($4$46  "$$& !!#s    A- -B c                    	 | j                   rIt        t        d      r9| j                  j                  t        j                  t        j
                  d       | j                  rIt        t        d      r9| j                  j                  t        j                  t        j                  d       | j                  j                  | j                         | j                  j                         | _	        y )NSO_REUSEADDR   SO_REUSEPORT)allow_reuse_addresshasattrrA   
setsockopt
SOL_SOCKETrw   allow_reuse_portry   bindr   getsocknamer*   s    r$   rt   zTCPServer.server_bind  s    	
 ##(GKK""6#4#4f6I6I1M  WV^%DKK""6#4#4f6I6I1M,,-"kk557r&   c                 P    	 | j                   j                  | j                         y r(   )rA   listenrequest_queue_sizer*   s    r$   r+   zTCPServer.server_activate  s!    	
 	4223r&   c                 :    	 | j                   j                          y r(   )rA   closer*   s    r$   rY   zTCPServer.server_close  s    	
 	r&   c                 8    	 | j                   j                         S r(   )rA   filenor*   s    r$   r   zTCPServer.fileno      	
 {{!!##r&   c                 8    	 | j                   j                         S r(   )rA   acceptr*   s    r$   rJ   zTCPServer.get_request  r   r&   c                     	 	 |j                  t        j                         | j	                  |       y # t        $ r Y w xY wr(   )r>   rA   SHUT_WRrK   r]   r^   s     r$   rP   zTCPServer.shutdown_request  sB    A	 V^^, 	7#  		s   4 	A A c                 &    	 |j                          y r(   )r   r^   s     r$   r]   zTCPServer.close_request  s    7r&   N)T)rl   rm   rn   rA   AF_INETrr   SOCK_STREAMrs   r   rz   r~   r%   rt   r+   rY   r   rJ   rP   r]   r)   r&   r$   r   r     sX    ,\ ^^N$$K84$$$r&   r   c                   J    e Zd Z	 dZdZej                  ZdZd Z	d Z
d Zd Zy)r   Fi    c                 r    | j                   j                  | j                        \  }}|| j                   f|fS r(   )rA   recvfrommax_packet_size)r#   dataclient_addrs      r$   rJ   zUDPServer.get_request  s5     KK001E1EFkdkk"K//r&   c                      y r(   r)   r*   s    r$   r+   zUDPServer.server_activate      r&   c                 &    | j                  |       y r(   r\   r^   s     r$   rP   zUDPServer.shutdown_request  s    7#r&   c                      y r(   r)   r^   s     r$   r]   zUDPServer.close_request#  r   r&   N)rl   rm   rn   rz   r~   rA   
SOCK_DGRAMrs   r   rJ   r+   rP   r]   r)   r&   r$   r   r     s5    ##KO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                   y t        | j                         | j                  k\  rX	 t        j                  dd      \  }}| j                   j                  |       t        | j                         | j                  k\  rX| j                   j                         D ]K  }	 |rdnt        j                  }t        j                  ||      \  }}| j                   j                  |       M y # t        $ r | j                   j                          Y t        $ r Y w xY w# t        $ r | j                   j                  |       Y t        $ r Y w xY w)Nr   )active_childrenlenmax_childrenoswaitpiddiscardChildProcessErrorr.   rK   copyWNOHANG)r#   r   pid_flagss        r$   collect_childrenzForkingMixIn.collect_children1  s0   I##+ d**+t/@/@@ZZA.FC((005 d**+t/@/@@ ++002 
!)ArzzEZZU3FC ((005 ) 1((..0  ) 6((005 s0   4C2 'AD%2#D"D"!D"%$EEEc                 &    	 | j                          y r(   r   r*   s    r$   rF   zForkingMixIn.handle_timeoutT       !!#r&   c                 &    	 | j                          y r(   r   r*   s    r$   r5   zForkingMixIn.service_actions[  r   r&   c                 @   	 t        j                         }|rH| j                  t               | _        | j                  j	                  |       | j                  |       y d}	 | j                  ||       d}	 | j                  |       t        j                  |       y # t        $ r | j                  ||       Y Ew xY w# t        j                  |       w xY w# 	 | j                  |       t        j                  |       w # t        j                  |       w xY wxY w)Nrx   r   )r   r   r   r6   addr]   rW   rN   rO   rP   _exit)r#   rR   rS   r   statuss        r$   rM   zForkingMixIn.process_requestb  s    ?'')C''/+.5D($$((-""7+ 	)''@F)--g6( ! ?%%g~>? ()--g6((sH   #B 8C  B=:C <B==C  CDD-DDDc                 Z    t         |           | j                  | j                         y )Nr   )superrY   r   block_on_closer#   	__class__s    r$   rY   zForkingMixIn.server_close{  s%    G "!!4+>+>!?r&   )rl   rm   rn   rC   r   r   r   r   rF   r5   rM   rY   __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                          |j                  ry t        |   |       y r(   )reapdaemonr   append)r#   threadr   s     r$   r   z_Threads.append  s"    		==vr&   c                     g | d d  c| d d  }|S r(   r)   )r#   results     r$   pop_allz_Threads.pop_all  s    d1gQr&   c                 N    | j                         D ]  }|j                           y r(   )r   joinr#   r   s     r$   r   z_Threads.join  s     lln 	FKKM	r&   c                     d | D        | d d  y )Nc              3   B   K   | ]  }|j                         s|  y wr(   )is_alive).0r   s     r$   	<genexpr>z _Threads.reap.<locals>.<genexpr>  s     Bf0A6Bs   r)   r*   s    r$   r   z_Threads.reap  s    BBQr&   )rl   rm   rn   r   r   r   r   r   r   s   @r$   r   r     s    Cr&   r   c                       e Zd Z	 d Zd Zy)
_NoThreadsc                      y r(   r)   r   s     r$   r   z_NoThreads.append      r&   c                      y r(   r)   r*   s    r$   r   z_NoThreads.join  r   r&   N)rl   rm   rn   r   r   r)   r&   r$   r   r     s    r&   r   c                   B     e Zd Z	 dZdZ e       Zd Zd Z fdZ	 xZ
S )r   FTc                     	 	 | j                  ||       | j                  |       y # t        $ r | j                  ||       Y /w xY w# | j                  |       w xY wr(   )rW   rN   rO   rP   rQ   s      r$   process_request_threadz%ThreadingMixIn.process_request_thread  s^    	
	+8 !!'*  	7g~6	7 !!'*s!   ' AA AA Ac                 "   	 | j                   r#t        |       j                  dt                      t	        j
                  | j                  ||f      }| j                  |_        | j                  j                  |       |j                          y )N_threads)targetrj   )r   vars
setdefaultr   r   Threadr   daemon_threadsr   r   r   start)r#   rR   rS   ts       r$   rM   zThreadingMixIn.process_request  sl    8J!!*hj9d&A&A%,n$=?&&Q		r&   c                 V    t         |           | j                  j                          y r(   )r   rY   r   r   r   s    r$   rY   zThreadingMixIn.server_close  s    r&   )rl   rm   rn   r   r   r   r   r   rM   rY   r   r   s   @r$   r   r     s/    > NN |H+ r&   r   c                       e Zd Zy)r   Nrl   rm   rn   r)   r&   r$   r   r         r&   r   c                       e Zd Zy)r   Nr   r)   r&   r$   r   r     r   r&   r   c                       e Zd Zy)r   Nr   r)   r&   r$   r   r     r   r&   r   c                       e Zd Zy)r	   Nr   r)   r&   r$   r	   r	     r   r&   r	   c                   $    e Zd Zej                  Zy)r   Nrl   rm   rn   rA   r   rr   r)   r&   r$   r   r         r&   r   c                   $    e Zd Zej                  Zy)r   Nr   r)   r&   r$   r   r     r   r&   r   c                       e Zd Zy)r   Nr   r)   r&   r$   r   r     r   r&   r   c                       e Zd Zy)r   Nr   r)   r&   r$   r   r     r   r&   r   c                       e Zd Zy)r   Nr   r)   r&   r$   r   r     r   r&   c                       e Zd Zy)r   Nr   r)   r&   r$   r   r     r   r&   c                   &    e Zd Z	 d Zd Zd Zd Zy)r
   c                     || _         || _        || _        | j                          	 | j	                          | j                          y # | j                          w xY wr(   )rR   rS   serversetuphandlefinish)r#   rR   rS   r   s       r$   r%   zBaseRequestHandler.__init__  sB    ,

	KKMKKMDKKMs   A Ac                      y r(   r)   r*   s    r$   r   zBaseRequestHandler.setup  r   r&   c                      y r(   r)   r*   s    r$   r   zBaseRequestHandler.handle   r   r&   c                      y r(   r)   r*   s    r$   r   zBaseRequestHandler.finish  r   r&   N)rl   rm   rn   r%   r   r   r   r)   r&   r$   r
   r
     s     r&   r
   c                   *    e Zd Z	 dZdZdZdZd Zd Zy)r   r   r   NFc                    | j                   | _        | j                  %| j                  j                  | j                         | j                  r9| j                  j                  t        j                  t        j                  d       | j                  j                  d| j                        | _        | j                  dk(  rt        | j                        | _        y | j                  j                  d| j                        | _        y )NTrbr   wb)rR   
connectionrC   
settimeoutdisable_nagle_algorithmr|   rA   IPPROTO_TCPTCP_NODELAYmakefilerbufsizerfilewbufsize_SocketWriterwfiler*   s    r$   r   zStreamRequestHandler.setup$  s    ,,<<#OO&&t||4''OO&&v'9'9'-'9'94A__--dDMMB
==A&t7DJ11$FDJr&   c                     | j                   j                  s	 | j                   j                          | j                   j                          | j                  j                          y # t        j                  $ r Y Jw xY wr(   )r  closedflushrA   errorr   r  r*   s    r$   r   zStreamRequestHandler.finish1  s`    zz  

  "
 	



 <<  s   A' 'A=<A=)	rl   rm   rn   r  r  rC   r   r   r   r)   r&   r$   r   r     s+    > HH G $G	r&   r   c                   &    e Zd Z	 d Zd Zd Zd Zy)r  c                     || _         y r(   )_sock)r#   socks     r$   r%   z_SocketWriter.__init__A  s	    
r&   c                      yr<   r)   r*   s    r$   writablez_SocketWriter.writableD  s    r&   c                     | j                   j                  |       t        |      5 }|j                  cd d d        S # 1 sw Y   y xY wr(   )r  sendall
memoryviewnbytes)r#   bviews      r$   writez_SocketWriter.writeG  s9    

1] 	d;;	 	 	s	   =Ac                 6    | j                   j                         S r(   )r  r   r*   s    r$   r   z_SocketWriter.filenoL  s    zz  ""r&   N)rl   rm   rn   r%   r  r  r   r)   r&   r$   r  r  <  s    J
#r&   r  c                       e Zd Z	 d Zd Zy)r   c                     ddl m} | j                  \  | _        | _         || j                        | _         |       | _        y )Nr   )BytesIO)ior  rR   packetrA   r  r  )r#   r  s     r$   r   zDatagramRequestHandler.setupS  s0    #'<< T[T[[)
Y
r&   c                     | j                   j                  | j                  j                         | j                         y r(   )rA   sendtor  getvaluerS   r*   s    r$   r   zDatagramRequestHandler.finishY  s)    4::..0$2E2EFr&   N)rl   rm   rn   r   r   r)   r&   r$   r   r   O  s    @Gr&   r   )&__version__rA   r1   r   rc   r   r  r   rE   r   __all__r{   extendr   r/   SelectSelectorr   r   r   r   listr   r   r   r   r   r   r	   r   r   r   r   r   r   r
   r   r  r   r)   r&   r$   <module>r&     s  vt    	 
   "7 2vNNJK
69NN 3 4 r613NOP 9n%,,O..Oj jZ@
 @F	 8 2vU@ U@pCt C, % %P 2v9<99<9 9 9 9 9
69(9 ((Y ( LN4DKOn6HOr6Kl4DKO6HO# #\+- +Z#N #&G/ Gr&   