a DOgj@sdZddlZddlZddlZddlZddlZddlmZddlm ZgdZ e edrde gde edr|e gd e ed rej ZnejZGd d d ZGd ddeZGdddeZe edrGdddZGdddeZGdddZGdddZe edr6GdddeeZGdddeeZGdddeeZGdd d eeZe edrGd!d"d"eZGd#d$d$eZGd%d&d&eeZGd'd(d(eeZGd)d*d*Z Gd+d,d,e Z!Gd-d.d.eZ"Gd/d0d0e Z#dS)1z0.4N)BufferedIOBase) monotonic) BaseServer TCPServer UDPServerThreadingUDPServerThreadingTCPServerBaseRequestHandlerStreamRequestHandlerDatagramRequestHandlerThreadingMixInfork)ForkingUDPServerForkingTCPServer ForkingMixInAF_UNIX)UnixStreamServerUnixDatagramServerThreadingUnixStreamServerThreadingUnixDatagramServer PollSelectorc@seZdZdZddZddZd%ddZd d Zd d Zd dZ ddZ ddZ ddZ ddZ ddZddZddZddZdd Zd!d"Zd#d$ZdS)&rNcCs ||_||_t|_d|_dSNF)server_addressRequestHandlerClass threadingEvent_BaseServer__is_shut_down_BaseServer__shutdown_request)selfrrr$/usr/lib64/python3.9/socketserver.py__init__s zBaseServer.__init__cCsdSNrrrrr server_activateszBaseServer.server_activate?cCs|jzvtL}||tj|jsP||}|jr:qP|rF|| q"Wdn1sd0YWd|_|j nd|_|j 0dSr) rclear_ServerSelectorregister selectors EVENT_READrselect_handle_request_noblockservice_actionsset)rZ poll_intervalselectorreadyrrr serve_forevers  * zBaseServer.serve_forevercCsd|_|jdSNT)rrwaitr#rrr shutdownszBaseServer.shutdowncCsdSr"rr#rrr r-szBaseServer.service_actionscCs|j}|dur|j}n|jdur0t||j}|durBt|}tt}||tj| |}|r|| WdS|durX|t}|dkrX| WdSqXWdn1s0YdS)Nr) socket gettimeouttimeoutmintimer'r(r)r*r+r,handle_timeout)rr7deadliner/r0rrr handle_requests       zBaseServer.handle_requestcCsz|\}}Wnty$YdS0|||rz|||Wqtyj|||||Yq||Yq0n ||dSr") get_requestOSErrorverify_requestprocess_request Exception handle_errorshutdown_requestrrequestclient_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_requestrrErrr rCjszBaseServer.shutdown_requestcCsdSr"rrKrrr rJnszBaseServer.close_requestcCs@tdtjdtd|tjdddl}|tdtjddS)Nz(----------------------------------------)filez4Exception occurred during processing of request fromr)printsysstderr traceback print_exc)rrErFrPrrr rBrszBaseServer.handle_errorcCs|Sr"rr#rrr __enter__szBaseServer.__enter__cGs |dSr")rH)rargsrrr __exit__szBaseServer.__exit__)r%)__name__ __module__ __qualname__r7r!r$r1r4r-r<r,r:r?r@rHrGrCrJrBrRrTrrrr rs$-    rc@sbeZdZejZejZdZdZ dddZ ddZ dd Z d d Z d d ZddZddZddZdS)rFTcCsTt|||t|j|j|_|rPz||Wn|Yn0dSr")rr!r5address_family socket_type server_bindr$rH)rrrZbind_and_activaterrr r!s zTCPServer.__init__cCs8|jr|jtjtjd|j|j|j|_dS)N)allow_reuse_addressr5 setsockopt SOL_SOCKET SO_REUSEADDRbindr getsocknamer#rrr r[szTCPServer.server_bindcCs|j|jdSr")r5listenrequest_queue_sizer#rrr r$szTCPServer.server_activatecCs|jdSr")r5closer#rrr rHszTCPServer.server_closecCs |jSr")r5filenor#rrr rfszTCPServer.filenocCs |jSr")r5acceptr#rrr r=szTCPServer.get_requestcCs2z|tjWnty"Yn0||dSr")r4r5SHUT_WRr>rJrKrrr rCs  zTCPServer.shutdown_requestcCs |dSr")rerKrrr rJszTCPServer.close_requestN)T)rUrVrWr5AF_INETrY SOCK_STREAMrZrdr]r!r[r$rHrfr=rCrJrrrr rs/   rc@s:eZdZdZejZdZddZddZ ddZ d d Z d S) rFi cCs |j|j\}}||jf|fSr")r5recvfrommax_packet_size)rdataZ 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 rsrcsReZdZdZdZdZdZddddZd d Zd d Z d dZ fddZ Z S)ri,N(TFblockingc Cs|jdurdSt|j|jkrrz tdd\}}|j|WqtyZ|jYqtynYqrYq0q|j D]b}z.|rdntj }t||\}}|j|Wq|ty|j|Yq|tyYq|0q|dS)Nr) active_childrenlen max_childrenoswaitpiddiscardChildProcessErrorr&r>copyWNOHANG)rrqpid_flagsrrr collect_children(s&      zForkingMixIn.collect_childrencCs |dSr"rr#rrr r:KszForkingMixIn.handle_timeoutcCs |dSr"rr#rrr r-RszForkingMixIn.service_actionscCst}|r8|jdurt|_|j|||dSd}z^z|||d}Wntyp|||Yn0Wz| |Wt |qt |0n(z| |Wt |n t |00dS)Nr\r) rvr rsr.addrJrGrArBrC_exit)rrErFr|statusrrr r@Ys&       zForkingMixIn.process_requestcst|j|jddS)Nrp)superrHrblock_on_closer# __class__rr rHrs zForkingMixIn.server_close) rUrVrWr7rsrurrr:r-r@rH __classcell__rrrr rs#rcs4eZdZfddZddZddZddZZS) _Threadscs"||jrdSt|dSr")reapdaemonrappendrthreadrrr r{sz_Threads.appendcCsg|dd|dd<}|Sr"r)rresultrrr pop_allsz_Threads.pop_allcCs|D] }|qdSr")rjoinrrrr rs z _Threads.joincCsdd|D|dd<dS)Ncss|]}|r|VqdSr")is_alive).0rrrr z _Threads.reap..rr#rrr rsz _Threads.reap)rUrVrWrrrrrrrrr rws rc@seZdZddZddZdS) _NoThreadscCsdSr"rrrrr rsz_NoThreads.appendcCsdSr"rr#rrr rsz_NoThreads.joinN)rUrVrWrrrrrr rsrcs:eZdZdZdZeZddZddZfddZ Z S) r FTc CsPz>z|||Wnty0|||Yn0W||n ||0dSr")rGrArBrCrDrrr process_request_threads  z%ThreadingMixIn.process_request_threadcCsL|jrt|dttj|j||fd}|j|_|j || dS)N_threads)targetrS) rvars setdefaultrrThreadrdaemon_threadsrrrstart)rrErFtrrr r@s zThreadingMixIn.process_requestcst|jdSr")rrHrrr#rrr rHs zThreadingMixIn.server_close) rUrVrWrrrrrr@rHrrrrr r s   r c@s eZdZdS)rNrUrVrWrrrr rrrc@s eZdZdS)rNrrrrr rrrc@s eZdZdS)rNrrrrr rrrc@s eZdZdS)rNrrrrr rrrc@seZdZejZdS)rNrUrVrWr5rrYrrrr rsrc@seZdZejZdS)rNrrrrr rsrc@s eZdZdS)rNrrrrr rrrc@s eZdZdS)rNrrrrr rrrc@s,eZdZddZddZddZddZd S) r cCs>||_||_||_|z|W|n |0dSr")rErFserversetuphandlefinish)rrErFrrrr r!s zBaseRequestHandler.__init__cCsdSr"rr#rrr rszBaseRequestHandler.setupcCsdSr"rr#rrr rszBaseRequestHandler.handlecCsdSr"rr#rrr rszBaseRequestHandler.finishN)rUrVrWr!rrrrrrr r s r c@s,eZdZdZdZdZdZddZddZdS) r rrrNFcCsz|j|_|jdur |j|j|jr:|jtjtjd|j d|j |_ |j dkrdt |j|_n|j d|j |_dS)NTrbrwb)rE connectionr7 settimeoutdisable_nagle_algorithmr^r5 IPPROTO_TCP TCP_NODELAYmakefilerbufsizerfilewbufsize _SocketWriterwfiler#rrr rs   zStreamRequestHandler.setupcCsD|jjs,z|jWntjy*Yn0|j|jdSr")rclosedflushr5errorrerr#rrr r#s zStreamRequestHandler.finish) rUrVrWrrr7rrrrrrr r s   r c@s,eZdZddZddZddZddZd S) rcCs ||_dSr")_sock)rsockrrr r!3sz_SocketWriter.__init__cCsdSr2rr#rrr writable6sz_SocketWriter.writablecCs>|j|t|}|jWdS1s00YdSr")rsendall memoryviewnbytes)rbviewrrr write9s  z_SocketWriter.writecCs |jSr")rrfr#rrr rf>sz_SocketWriter.filenoN)rUrVrWr!rrrfrrrr r.src@seZdZddZddZdS)r cCs2ddlm}|j\|_|_||j|_||_dS)Nr)BytesIO)iorrEZpacketr5rr)rrrrr rEs  zDatagramRequestHandler.setupcCs|j|j|jdSr")r5sendtorgetvaluerFr#rrr rKszDatagramRequestHandler.finishN)rUrVrWrrrrrr r Asr )$ __version__r5r)rvrNrrrr9r__all__hasattrextendrr'SelectSelectorrrrrlistrrr rrrrrrrrr r rr rrrr {sL     n~ X (  .-