a 4êdg 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Ú threadingÚEventÚ_BaseServer__is_shut_downÚ_BaseServer__shutdown_request)Úselfrr©rú(/usr/local/lib/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#rrr r-þszBaseServer.service_actionscCsÐ|j ¡}|dur|j}n|jdur0t||jƒ}|durBtƒ|}tƒt}| |tj¡|  |¡}|r||  ¡WdƒS|durX|tƒ}|dkrX|  ¡WdƒSqXWdƒn1sÂ0YdS)Nr) ÚsocketÚ gettimeoutÚtimeoutÚminÚtimer'r(r)r*r+r,Úhandle_timeout)rr7Údeadliner/r0rrr Ú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_addressrrr r,/s      z"BaseServer._handle_request_noblockcCsdSr"rr#rrr r:FszBaseServer.handle_timeoutcCsdSr2rrDrrr r?MszBaseServer.verify_requestcCs| ||¡| |¡dSr")Úfinish_requestrCrDrrr r@Us zBaseServer.process_requestcCsdSr"rr#rrr Ú server_close^szBaseServer.server_closecCs| |||¡dSr")rrDrrr rGfszBaseServer.finish_requestcCs| |¡dSr"©Ú close_request©rrErrr rCjszBaseServer.shutdown_requestcCsdSr"rrKrrr rJnszBaseServer.close_requestcCs@tdtjdtd|tjdddl}| ¡tdtjddS)Nz(----------------------------------------)Úfilez4Exception occurred during processing of request fromr)ÚprintÚsysÚstderrÚ tracebackÚ print_exc)rrErFrPrrr rBrsÿzBaseServer.handle_errorcCs|Sr"rr#rrr Ú __enter__szBaseServer.__enter__cGs | ¡dSr")rH)rÚargsrrr Ú__exit__‚szBaseServer.__exit__)r%)Ú__name__Ú __module__Ú __qualname__r7r!r$r1r4r-r<r,r:r?r@rHrGrCrJrBrRrTrrrr r™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!r5Úaddress_familyÚ socket_typeÚ server_bindr$rH)rrrZbind_and_activaterrr r!½sÿ zTCPServer.__init__cCs8|jr|j tjtjd¡|j |j¡|j ¡|_dS)Né)Úallow_reuse_addressr5Ú setsockoptÚ SOL_SOCKETÚ SO_REUSEADDRÚbindrÚ getsocknamer#rrr r[ÊszTCPServer.server_bindcCs|j |j¡dSr")r5ÚlistenÚrequest_queue_sizer#rrr r$ÕszTCPServer.server_activatecCs|j ¡dSr")r5Úcloser#rrr rHÝszTCPServer.server_closecCs |j ¡Sr")r5Úfilenor#rrr rfåszTCPServer.filenocCs |j ¡Sr")r5Úacceptr#rrr r=íszTCPServer.get_requestcCs2z| tj¡Wnty"Yn0| |¡dSr")r4r5ÚSHUT_WRr>rJrKrrr rCõs  zTCPServer.shutdown_requestcCs | ¡dSr")rerKrrr rJÿszTCPServer.close_requestN)T)rUrVrWr5ÚAF_INETrYÚ SOCK_STREAMrZrdr]r!r[r$rHrfr=rCrJrrrr r†s/   rc@s:eZdZdZejZdZdd„Zdd„Z dd„Z d d „Z d S) rFi cCs |j |j¡\}}||jf|fSr")r5ÚrecvfromÚmax_packet_size)rÚdataZ client_addrrrr r=szUDPServer.get_requestcCsdSr"rr#rrr r$szUDPServer.server_activatecCs| |¡dSr"rIrKrrr rCszUDPServer.shutdown_requestcCsdSr"rrKrrr rJszUDPServer.close_requestN) rUrVrWr]r5Ú SOCK_DGRAMrZrlr=r$rCrJrrrr rsrcsReZdZdZdZdZdZddœ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)rrqÚpidÚ_Úflagsrrr Úcollect_children(s&      zForkingMixIn.collect_childrencCs | ¡dSr"©rr#rrr r:KszForkingMixIn.handle_timeoutcCs | ¡dSr"r€r#rrr r-RszForkingMixIn.service_actionscCsÈt ¡}|r8|jdurtƒ|_|j |¡| |¡dSd}z^z| ||¡d}Wntyp| ||¡Yn0Wz|  |¡Wt  |¡qÄt  |¡0n(z|  |¡Wt  |¡n t  |¡00dS)Nr\r) rvr rsr.ÚaddrJrGrArBrCÚ_exit)rrErFr|Ústatusrrr r@Ys&      ý zForkingMixIn.process_requestcstƒ ¡|j|jddS)Nrp)ÚsuperrHrÚblock_on_closer#©Ú __class__rr rHrs zForkingMixIn.server_close) rUrVrWr7rsrur…rr:r-r@rHÚ __classcell__rrr†r rs#rcs4eZdZ‡fdd„Zdd„Zdd„Zdd„Z‡ZS) Ú_Threadscs"| ¡|jrdStƒ |¡dSr")ÚreapÚdaemonr„Úappend©rÚthreadr†rr rŒ{sz_Threads.appendcCsg|dd…|dd…<}|Sr"r)rÚresultrrr Úpop_allsz_Threads.pop_allcCs| ¡D] }| ¡qdSr")rÚjoinrrrr r‘…s z _Threads.joincCsdd„|Dƒ|dd…<dS)Ncss|]}| ¡r|VqdSr")Úis_alive)Ú.0rŽrrr Ú Šóz _Threads.reap..rr#rrr rЉsz _Threads.reap)rUrVrWrŒrr‘rŠrˆrrr†r r‰ws r‰c@seZdZdd„Zdd„ZdS)Ú _NoThreadscCsdSr"rrrrr rŒ‘sz_NoThreads.appendcCsdSr"rr#rrr r‘”sz_NoThreads.joinN)rUrVrWrŒr‘rrrr r–sr–cs:eZdZdZdZeƒZdd„Zdd„Z‡fdd„Z ‡Z S) r FTc CsPz>z| ||¡Wnty0| ||¡Yn0W| |¡n | |¡0dSr")rGrArBrCrDrrr Úprocess_request_thread¤s  z%ThreadingMixIn.process_request_threadcCsL|jrt|ƒ dtƒ¡tj|j||fd}|j|_|j   |¡|  ¡dS)NÚ_threads)ÚtargetrS) r…ÚvarsÚ setdefaultr‰rÚThreadr—Údaemon_threadsr‹r˜rŒÚstart)rrErFÚtrrr r@±sÿ zThreadingMixIn.process_requestcstƒ ¡|j ¡dSr")r„rHr˜r‘r#r†rr rH»s zThreadingMixIn.server_close) rUrVrWrr…r–r˜r—r@rHrˆrrr†r r ˜s   r c@s eZdZdS)rN©rUrVrWrrrr rÁr•rc@s eZdZdS)rNr rrrr rÂr•rc@s eZdZdS)rNr rrrr rÄr•rc@s eZdZdS)rNr rrrr rÅr•rc@seZdZejZdS)rN©rUrVrWr5rrYrrrr rÉsrc@seZdZejZdS)rNr¡rrrr rÌsrc@s eZdZdS)rNr rrrr rÏr•rc@s eZdZdS)rNr rrrr rÑr•rc@s,eZdZdd„Zdd„Zdd„Zdd„Zd S) r cCs>||_||_||_| ¡z| ¡W| ¡n | ¡0dSr")rErFÚserverÚsetupÚhandleÚfinish)rrErFr¢rrr r!ås zBaseRequestHandler.__init__cCsdSr"rr#rrr r£ïszBaseRequestHandler.setupcCsdSr"rr#rrr r¤òszBaseRequestHandler.handlecCsdSr"rr#rrr r¥õszBaseRequestHandler.finishN)rUrVrWr!r£r¤r¥rrrr r Ós r c@s,eZdZdZdZdZdZdd„Zdd„ZdS) r rrrNFcCsz|j|_|jdur |j |j¡|jr:|j tjtjd¡|j  d|j ¡|_ |j dkrdt |jƒ|_n|j  d|j ¡|_dS)NTÚrbrÚwb)rEÚ connectionr7Ú settimeoutÚdisable_nagle_algorithmr^r5Ú IPPROTO_TCPÚ TCP_NODELAYÚmakefileÚrbufsizeÚrfileÚwbufsizeÚ _SocketWriterÚwfiler#rrr r£s  ÿ zStreamRequestHandler.setupcCsD|jjs,z|j ¡Wntjy*Yn0|j ¡|j ¡dSr")r²ÚclosedÚflushr5Úerrorrer¯r#rrr r¥#s zStreamRequestHandler.finish) rUrVrWr®r°r7rªr£r¥rrrr r s   r c@s,eZdZdd„Zdd„Zdd„Zdd„Zd S) r±cCs ||_dSr")Ú_sock)rÚsockrrr r!3sz_SocketWriter.__init__cCsdSr2rr#rrr Úwritable6sz_SocketWriter.writablecCs>|j |¡t|ƒ}|jWdƒS1s00YdSr")r¶ÚsendallÚ memoryviewÚnbytes)rÚbÚviewrrr Úwrite9s  z_SocketWriter.writecCs |j ¡Sr")r¶rfr#rrr rf>sz_SocketWriter.filenoN)rUrVrWr!r¸r¾rfrrrr r±.sr±c@seZdZdd„Zdd„ZdS)r cCs2ddlm}|j\|_|_||jƒ|_|ƒ|_dS)Nr)ÚBytesIO)Úior¿rEZpacketr5r¯r²)rr¿rrr r£Es  zDatagramRequestHandler.setupcCs|j |j ¡|j¡dSr")r5Úsendtor²ÚgetvaluerFr#rrr r¥KszDatagramRequestHandler.finishN)rUrVrWr£r¥rrrr r Asr )$Ú __version__r5r)rvrNrrÀrr9rÚ__all__ÚhasattrÚextendrr'ÚSelectSelectorrrrrÚlistr‰r–r rrrrrrrrr r r±r rrrr Ú{sL     n~ X (  .-