B j4Ötä®?ã @sâdZddlZddlZddlZddlZddlZddlmZddlm Zddddd d d d d g Z e edƒrte   dddg¡e edƒre   ddddg¡e edƒr¢ej ZnejZGdd„dƒZGdd„deƒZGdd„deƒZe edƒrîGdd„dƒZGdd „d ƒZe edƒr,Gdd„deeƒZGdd„deeƒZGdd„deeƒZGd d „d eeƒZe edƒr Gd!d„deƒZGd"d„deƒZGd#d„deeƒZGd$d„deeƒZGd%d „d ƒZGd&d „d eƒZGd'd(„d(eƒZGd)d „d eƒZ dS)*z0.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ú//opt/alt/python37/lib/python3.7/socketserver.pyÚ__init__Ès zBaseServer.__init__cCsdS)Nr)rrrrÚserver_activateÏszBaseServer.server_activateçà?c Csx|j ¡zVtƒF}| |tj¡x0|jsR| |¡}|jrrrrr8MszBaseServer.verify_requestcCs| ||¡| |¡dS)N)Úfinish_requestr<)rr=r>rrrr9Us zBaseServer.process_requestcCsdS)Nr)rrrrÚ server_close^szBaseServer.server_closecCs| |||¡dS)N)r)rr=r>rrrr?fszBaseServer.finish_requestcCs| |¡dS)N)Ú close_request)rr=rrrr<jszBaseServer.shutdown_requestcCsdS)Nr)rr=rrrrAnszBaseServer.close_requestcCs@tdtjdtd|tjdddl}| ¡tdtjddS)Nz(----------------------------------------)Úfilez4Exception happened during processing of request fromr)ÚprintÚsysÚstderrÚ tracebackÚ print_exc)rr=r>rFrrrr;rs  zBaseServer.handle_errorcCs|S)Nr)rrrrÚ __enter__szBaseServer.__enter__cGs | ¡dS)N)r@)rÚargsrrrÚ__exit__‚szBaseServer.__exit__)r!)Ú__name__Ú __module__Ú __qualname__r1rr r-r/r)r5r(r4r8r9r@r?r<rAr;rHrJrrrrr™s$-    c@sbeZdZejZejZdZdZ ddd„Z dd„Z dd „Z d d „Z d d „Zdd„Zdd„Zdd„ZdS)réFTcCsTt |||¡t |j|j¡|_|rPy| ¡| ¡Wn| ¡‚YnXdS)N)rrr0Úaddress_familyÚ socket_typeÚ server_bindr r@)rrrZbind_and_activaterrrr½s  zTCPServer.__init__cCs8|jr|j tjtjd¡|j |j¡|j ¡|_dS)Né)Úallow_reuse_addressr0Ú setsockoptZ SOL_SOCKETZ SO_REUSEADDRZbindrZ getsockname)rrrrrQÊszTCPServer.server_bindcCs|j |j¡dS)N)r0ZlistenÚrequest_queue_size)rrrrr ÕszTCPServer.server_activatecCs|j ¡dS)N)r0Úclose)rrrrr@ÝszTCPServer.server_closecCs |j ¡S)N)r0Úfileno)rrrrrWåszTCPServer.filenocCs |j ¡S)N)r0Zaccept)rrrrr6íszTCPServer.get_requestcCs4y| tj¡Wntk r$YnX| |¡dS)N)r/r0ZSHUT_WRr7rA)rr=rrrr<õs zTCPServer.shutdown_requestcCs | ¡dS)N)rV)rr=rrrrAÿszTCPServer.close_requestN)T)rKrLrMr0ZAF_INETrOZ SOCK_STREAMrPrUrSrrQr r@rWr6r<rArrrrr†s/   c@s:eZdZdZejZdZdd„Zdd„Z dd„Z d d „Z d S) rFi cCs |j |j¡\}}||jf|fS)N)r0ZrecvfromÚmax_packet_size)rÚdataZ client_addrrrrr6szUDPServer.get_requestcCsdS)Nr)rrrrr szUDPServer.server_activatecCs| |¡dS)N)rA)rr=rrrr<szUDPServer.shutdown_requestcCsdS)Nr)rr=rrrrAszUDPServer.close_requestN) rKrLrMrSr0Z SOCK_DGRAMrPrXr6r r<rArrrrrscsReZdZdZdZdZdZddœdd„Zd d „Zd d „Z d d„Z ‡fdd„Z ‡Z S)ri,Né(TF)Úblockingc Csò|jdkrdSxht|jƒ|jkrvy t dd¡\}}|j |¡Wqtk r^|j ¡Yqtk rrPYqXqWxt|j  ¡D]f}y.|r’dntj }t ||¡\}}|j |¡Wq„tk rÖ|j |¡Yq„tk rèYq„Xq„WdS)Néÿÿÿÿr) Úactive_childrenÚlenÚ max_childrenÚosÚwaitpidÚdiscardÚChildProcessErrorr"r7ÚcopyÚWNOHANG)rr[ÚpidÚ_ÚflagsrrrÚcollect_children(s&  zForkingMixIn.collect_childrencCs | ¡dS)N)ri)rrrrr4KszForkingMixIn.handle_timeoutcCs | ¡dS)N)ri)rrrrr)RszForkingMixIn.service_actionscCsšt ¡}|r8|jdkrtƒ|_|j |¡| |¡dSd}z:y| ||¡d}Wn tk rr| ||¡YnXWdz|  |¡Wdt  |¡XXdS)NrRr) r`r r]r*ÚaddrAr?r:r;r<Ú_exit)rr=r>rfÚstatusrrrr9Ys     zForkingMixIn.process_requestcstƒ ¡|j|jddS)N)r[)Úsuperr@riÚblock_on_close)r)Ú __class__rrr@rs zForkingMixIn.server_close) rKrLrMr1r]r_rnrir4r)r9r@Ú __classcell__rr)rorrs#cs8eZdZdZdZdZdd„Zdd„Z‡fdd „Z‡Z S) r FTNc CsHz6y| ||¡Wn tk r2| ||¡YnXWd| |¡XdS)N)r?r:r;r<)rr=r>rrrÚprocess_request_threadƒs z%ThreadingMixIn.process_request_threadcCsPtj|j||fd}|j|_|jsD|jrD|jdkr8g|_|j |¡| ¡dS)N)ÚtargetrI) rZThreadrqÚdaemon_threadsZdaemonrnÚ_threadsÚappendÚstart)rr=r>Útrrrr9s    zThreadingMixIn.process_requestcs:tƒ ¡|jr6|j}d|_|r6x|D] }| ¡q&WdS)N)rmr@rnrtÚjoin)rZthreadsZthread)rorrr@›s  zThreadingMixIn.server_close) rKrLrMrsrnrtrqr9r@rprr)rorr ws   c@s eZdZdS)rN)rKrLrMrrrrr¦sc@s eZdZdS)rN)rKrLrMrrrrr§sc@s eZdZdS)rN)rKrLrMrrrrr©sc@s eZdZdS)rN)rKrLrMrrrrrªsc@seZdZejZdS)rN)rKrLrMr0rrOrrrrr®sc@seZdZejZdS)rN)rKrLrMr0rrOrrrrr±sc@s eZdZdS)rN)rKrLrMrrrrr´sc@s eZdZdS)rN)rKrLrMrrrrr¶sc@s,eZdZdd„Zdd„Zdd„Zdd„Zd S) r cCs6||_||_||_| ¡z | ¡Wd| ¡XdS)N)r=r>ÚserverÚsetupÚhandleÚfinish)rr=r>ryrrrrÊs zBaseRequestHandler.__init__cCsdS)Nr)rrrrrzÔszBaseRequestHandler.setupcCsdS)Nr)rrrrr{×szBaseRequestHandler.handlecCsdS)Nr)rrrrr|ÚszBaseRequestHandler.finishN)rKrLrMrrzr{r|rrrrr ¸s c@s,eZdZdZdZdZdZdd„Zdd„ZdS) r r\rNFcCsz|j|_|jdk r |j |j¡|jr:|j tjtjd¡|j  d|j ¡|_ |j dkrdt |jƒ|_n|j  d|j ¡|_dS)NTÚrbrÚwb)r=Z connectionr1Z settimeoutÚdisable_nagle_algorithmrTr0Z IPPROTO_TCPZ TCP_NODELAYZmakefileÚrbufsizeÚrfileÚwbufsizeÚ _SocketWriterÚwfile)rrrrrzûs    zStreamRequestHandler.setupcCsF|jjs.y|j ¡Wntjk r,YnX|j ¡|j ¡dS)N)r„ÚclosedÚflushr0ÚerrorrVr)rrrrr|s zStreamRequestHandler.finish) rKrLrMr€r‚r1rrzr|rrrrr æs   c@s,eZdZdd„Zdd„Zdd„Zdd„Zd S) rƒcCs ||_dS)N)Ú_sock)rZsockrrrrsz_SocketWriter.__init__cCsdS)NTr)rrrrÚwritablesz_SocketWriter.writablec Cs&|j |¡t|ƒ}|jSQRXdS)N)rˆZsendallÚ memoryviewÚnbytes)rÚbZviewrrrÚwrites  z_SocketWriter.writecCs |j ¡S)N)rˆrW)rrrrrW#sz_SocketWriter.filenoN)rKrLrMrr‰rrWrrrrrƒsrƒc@seZdZdd„Zdd„ZdS)r cCs2ddlm}|j\|_|_||jƒ|_|ƒ|_dS)Nr)ÚBytesIO)ÚiorŽr=Zpacketr0rr„)rrŽrrrrz*s  zDatagramRequestHandler.setupcCs|j |j ¡|j¡dS)N)r0Zsendtor„Úgetvaluer>)rrrrr|0szDatagramRequestHandler.finishN)rKrLrMrzr|rrrrr &s)!Ú __version__r0r%r`rDrrrr3rÚ__all__ÚhasattrÚextendrr#ZSelectSelectorrrrrr rrrrrrrrr r rƒr rrrrÚ{sR     n~ X.  .-