a ÕDOg jã@sìdZddlZddlZddlZddlZddlZddlmZddlm Zgd¢Z e edƒrde   gd¢¡e edƒr|e   gd ¢¡e ed ƒrŽej ZnejZGd d „d ƒZGd d„deƒZGdd„deƒZe edƒrÚGdd„dƒZGdd„deƒZGdd„dƒZGdd„dƒZe edƒr6Gdd„deeƒZGdd„deeƒZGdd„deeƒZGdd „d eeƒZe edƒrªGd!d"„d"eƒZGd#d$„d$eƒZGd%d&„d&eeƒZGd'd(„d(eeƒZGd)d*„d*ƒZ Gd+d,„d,e ƒZ!Gd-d.„d.eƒZ"Gd/d0„d0e ƒZ#dS)1z0.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šeZdZdZdd„Zdd„Zd%dd„Zd d „Zd d „Zd d„Z dd„Z dd„Z dd„Z dd„Z dd„Zdd„Zdd„Zdd„Zdd „Zd!d"„Zd#d$„ZdS)&rNcCs ||_||_t ¡|_d|_dS©NF)Úserver_addressÚRequestHandlerClassÚ threadingZEventÚ_BaseServer__is_shut_downÚ_BaseServer__shutdown_request)Úselfrr©rú1/opt/alt/python39/lib64/python3.9/socketserver.pyÚ__init__Ès zBaseServer.__init__cCsdS©Nr©rrrrÚserver_activateÏszBaseServer.server_activateçà?cCs˜|j ¡zvtƒL}| |tj¡|jsP| |¡}|jr:qP|rF| ¡|  ¡q"Wdƒn1sd0YWd|_|j  ¡nd|_|j  ¡0dSr) rÚclearÚ_ServerSelectorÚregisterÚ selectorsÚ EVENT_READrÚselectÚ_handle_request_noblockÚservice_actionsÚset)rZ poll_intervalÚselectorÚreadyrrrÚ serve_forever×s  * ÿzBaseServer.serve_forevercCsd|_|j ¡dS©NT)rrÚwaitr"rrrÚshutdownôszBaseServer.shutdowncCsdSr!rr"rrrr,þszBaseServer.service_actionscCsÐ|j ¡}|dur|j}n|jdur0t||jƒ}|durBtƒ|}tƒt}| |tj¡|  |¡}|r||  ¡WdƒS|durX|tƒ}|dkrX|  ¡WdƒSqXWdƒn1sÂ0YdS)Nr) ÚsocketZ gettimeoutÚtimeoutÚminÚtimer&r'r(r)r*r+Úhandle_timeout)rr5Zdeadliner.r/rrrÚhandle_requests       zBaseServer.handle_requestcCs’z| ¡\}}Wnty$YdS0| ||¡r„z| ||¡WqŽtyj| ||¡| |¡YqŽ| |¡‚YqŽ0n | |¡dSr!)Ú get_requestÚOSErrorÚverify_requestÚprocess_requestÚ ExceptionÚ handle_errorÚshutdown_request©rÚrequestÚclient_addressrrrr+/s      z"BaseServer._handle_request_noblockcCsdSr!rr"rrrr8FszBaseServer.handle_timeoutcCsdSr1rrArrrr<MszBaseServer.verify_requestcCs| ||¡| |¡dSr!)Úfinish_requestr@rArrrr=Us zBaseServer.process_requestcCsdSr!rr"rrrÚ server_close^szBaseServer.server_closecCs| |||¡dSr!)rrArrrrDfszBaseServer.finish_requestcCs| |¡dSr!©Ú close_request©rrBrrrr@jszBaseServer.shutdown_requestcCsdSr!rrHrrrrGnszBaseServer.close_requestcCs@tdtjdtd|tjdddl}| ¡tdtjddS)Nz(----------------------------------------)Úfilez4Exception occurred during processing of request fromr)ÚprintÚsysÚstderrÚ tracebackÚ print_exc)rrBrCrMrrrr?rsÿzBaseServer.handle_errorcCs|Sr!rr"rrrÚ __enter__szBaseServer.__enter__cGs | ¡dSr!)rE)rÚargsrrrÚ__exit__‚szBaseServer.__exit__)r$)Ú__name__Ú __module__Ú __qualname__r5r r#r0r3r,r9r+r8r<r=rErDr@rGr?rOrQrrrrr™s$-    rc@sbeZdZejZejZdZdZ ddd„Z dd„Z dd „Z d d „Z d d „Zdd„Zdd„Zdd„ZdS)réFTcCsTt |||¡t |j|j¡|_|rPz| ¡| ¡Wn| ¡‚Yn0dSr!)rr r4Úaddress_familyÚ socket_typeÚ server_bindr#rE)rrrZbind_and_activaterrrr ½sÿ zTCPServer.__init__cCs8|jr|j tjtjd¡|j |j¡|j ¡|_dS)Né)Úallow_reuse_addressr4Ú setsockoptZ SOL_SOCKETZ SO_REUSEADDRZbindrZ getsocknamer"rrrrXÊszTCPServer.server_bindcCs|j |j¡dSr!)r4ZlistenÚrequest_queue_sizer"rrrr#ÕszTCPServer.server_activatecCs|j ¡dSr!)r4Úcloser"rrrrEÝszTCPServer.server_closecCs |j ¡Sr!)r4Úfilenor"rrrr^åszTCPServer.filenocCs |j ¡Sr!)r4Zacceptr"rrrr:íszTCPServer.get_requestcCs2z| tj¡Wnty"Yn0| |¡dSr!)r3r4ZSHUT_WRr;rGrHrrrr@õs  zTCPServer.shutdown_requestcCs | ¡dSr!)r]rHrrrrGÿszTCPServer.close_requestN)T)rRrSrTr4ZAF_INETrVZ SOCK_STREAMrWr\rZr rXr#rEr^r:r@rGrrrrr†s/   rc@s:eZdZdZejZdZdd„Zdd„Z dd„Z d d „Z d S) rFi cCs |j |j¡\}}||jf|fSr!)r4ZrecvfromÚmax_packet_size)rÚdataZ client_addrrrrr:szUDPServer.get_requestcCsdSr!rr"rrrr#szUDPServer.server_activatecCs| |¡dSr!rFrHrrrr@szUDPServer.shutdown_requestcCsdSr!rrHrrrrGszUDPServer.close_requestN) rRrSrTrZr4Z SOCK_DGRAMrWr_r:r#r@rGrrrrrsrcsReZdZdZdZdZdZddœdd„Zd d „Zd d „Z d d„Z ‡fdd„Z ‡Z S)ri,Né(TF©Úblockingc Csä|jdurdSt|jƒ|jkrrz t dd¡\}}|j |¡WqtyZ|j ¡YqtynYqrYq0q|j  ¡D]b}z.|rŠdntj }t ||¡\}}|j |¡Wq|tyÌ|j |¡Yq|tyÜYq|0q|dS)Néÿÿÿÿr) Úactive_childrenÚlenÚ max_childrenÚosÚwaitpidÚdiscardÚChildProcessErrorr%r;ÚcopyÚWNOHANG)rrcÚpidÚ_ÚflagsrrrÚcollect_children(s&      zForkingMixIn.collect_childrencCs | ¡dSr!©rqr"rrrr8KszForkingMixIn.handle_timeoutcCs | ¡dSr!rrr"rrrr,RszForkingMixIn.service_actionscCsÈt ¡}|r8|jdurtƒ|_|j |¡| |¡dSd}z^z| ||¡d}Wntyp| ||¡Yn0Wz|  |¡Wt  |¡qÄt  |¡0n(z|  |¡Wt  |¡n t  |¡00dS)NrYr) rhr rer-ÚaddrGrDr>r?r@Ú_exit)rrBrCrnZstatusrrrr=Ys&      ý zForkingMixIn.process_requestcstƒ ¡|j|jddS)Nrb)ÚsuperrErqÚblock_on_closer"©Ú __class__rrrErs zForkingMixIn.server_close) rRrSrTr5rergrvrqr8r,r=rEÚ __classcell__rrrwrrs#rcs4eZdZ‡fdd„Zdd„Zdd„Zdd„Z‡ZS) Ú_Threadscs"| ¡|jrdStƒ |¡dSr!)ÚreapÚdaemonruÚappend©rÚthreadrwrrr}{sz_Threads.appendcCsg|dd…|dd…<}|Sr!r)rÚresultrrrÚpop_allsz_Threads.pop_allcCs| ¡D] }| ¡qdSr!)rÚjoinr~rrrr‚…s z _Threads.joincCsdd„|Dƒ|dd…<dS)Ncss|]}| ¡r|VqdSr!)Zis_alive)Ú.0rrrrÚ Šóz _Threads.reap..rr"rrrr{‰sz _Threads.reap)rRrSrTr}rr‚r{ryrrrwrrzws rzc@seZdZdd„Zdd„ZdS)Ú _NoThreadscCsdSr!rr~rrrr}‘sz_NoThreads.appendcCsdSr!rr"rrrr‚”sz_NoThreads.joinN)rRrSrTr}r‚rrrrr†sr†cs:eZdZdZdZeƒZdd„Zdd„Z‡fdd„Z ‡Z S) r FTc CsPz>z| ||¡Wnty0| ||¡Yn0W| |¡n | |¡0dSr!)rDr>r?r@rArrrÚprocess_request_thread¤s  z%ThreadingMixIn.process_request_threadcCsL|jrt|ƒ dtƒ¡tj|j||fd}|j|_|j   |¡|  ¡dS)NÚ_threads)ÚtargetrP) rvÚvarsÚ setdefaultrzrZThreadr‡Údaemon_threadsr|rˆr}Ústart)rrBrCÚtrrrr=±sÿ zThreadingMixIn.process_requestcstƒ ¡|j ¡dSr!)rurErˆr‚r"rwrrrE»s zThreadingMixIn.server_close) rRrSrTrŒrvr†rˆr‡r=rEryrrrwrr ˜s   r c@s eZdZdS)rN©rRrSrTrrrrrÁr…rc@s eZdZdS)rNrrrrrrÂr…rc@s eZdZdS)rNrrrrrrÄr…rc@s eZdZdS)rNrrrrrrÅr…rc@seZdZejZdS)rN©rRrSrTr4rrVrrrrrÉsrc@seZdZejZdS)rNrrrrrrÌsrc@s eZdZdS)rNrrrrrrÏr…rc@s eZdZdS)rNrrrrrrÑr…rc@s,eZdZdd„Zdd„Zdd„Zdd„Zd S) r cCs>||_||_||_| ¡z| ¡W| ¡n | ¡0dSr!)rBrCÚserverÚsetupÚhandleÚfinish)rrBrCr‘rrrr ås zBaseRequestHandler.__init__cCsdSr!rr"rrrr’ïszBaseRequestHandler.setupcCsdSr!rr"rrrr“òszBaseRequestHandler.handlecCsdSr!rr"rrrr”õszBaseRequestHandler.finishN)rRrSrTr r’r“r”rrrrr Ós r c@s,eZdZdZdZdZdZdd„Zdd„ZdS) r rdrNFcCsz|j|_|jdur |j |j¡|jr:|j tjtjd¡|j  d|j ¡|_ |j dkrdt |jƒ|_n|j  d|j ¡|_dS)NTÚrbrÚwb)rBZ connectionr5Z settimeoutÚdisable_nagle_algorithmr[r4Z IPPROTO_TCPZ TCP_NODELAYZmakefileÚrbufsizeÚrfileÚwbufsizeÚ _SocketWriterÚwfiler"rrrr’s  ÿ zStreamRequestHandler.setupcCsD|jjs,z|j ¡Wntjy*Yn0|j ¡|j ¡dSr!)rœÚclosedÚflushr4Úerrorr]r™r"rrrr”#s zStreamRequestHandler.finish) rRrSrTr˜ršr5r—r’r”rrrrr s   r c@s,eZdZdd„Zdd„Zdd„Zdd„Zd S) r›cCs ||_dSr!)Ú_sock)rZsockrrrr 3sz_SocketWriter.__init__cCsdSr1rr"rrrÚwritable6sz_SocketWriter.writablecCs>|j |¡t|ƒ}|jWdƒS1s00YdSr!)r ZsendallÚ memoryviewÚnbytes)rÚbZviewrrrÚwrite9s  z_SocketWriter.writecCs |j ¡Sr!)r r^r"rrrr^>sz_SocketWriter.filenoN)rRrSrTr r¡r¥r^rrrrr›.sr›c@seZdZdd„Zdd„ZdS)r cCs2ddlm}|j\|_|_||jƒ|_|ƒ|_dS)Nr)ÚBytesIO)Úior¦rBZpacketr4r™rœ)rr¦rrrr’Es  zDatagramRequestHandler.setupcCs|j |j ¡|j¡dSr!)r4ZsendtorœÚgetvaluerCr"rrrr”KszDatagramRequestHandler.finishN)rRrSrTr’r”rrrrr Asr )$Ú __version__r4r(rhrKrr§rr7rÚ__all__ÚhasattrÚextendrr&ZSelectSelectorrrrrÚlistrzr†r rrrrrrrrr r r›r rrrrÚ{sL     n~ X (  .-