3 \‚iã@sdZddlZddlZddlZddlZddlZy ddlZWnek rTddlZYnXddl m Z ddl m Z ddddd d d d d g Z eedƒrže jdddgƒeedƒrºe jddddgƒeedƒrÌejZnejZGdd„dƒZGdd„deƒZGdd„deƒZeedƒ�rGdd„dƒZGdd „d ƒZeedƒ�rXGdd„deeƒZGdd„deeƒZGdd„deeƒZGd d „d eeƒZeedƒ�rÌGd!d„deƒZGd"d„deƒZGd#d„deeƒZGd$d„deeƒZGd%d „d ƒZ Gd&d „d e ƒZ!Gd'd(„d(e ƒZ"Gd)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 ||_||_tjƒ|_d|_dS)NF)Úserver_addressÚRequestHandlerClassÚ threadingZEventÚ_BaseServer__is_shut_downÚ_BaseServer__shutdown_request)Úselfrr©rú$/usr/lib64/python3.6/socketserver.pyÚ__init__Ìs zBaseServer.__init__cCsdS)Nr)rrrrÚserver_activateÓszBaseServer.server_activateçà?cCsx|jjƒzVtƒ�F}|j|tjƒx0|jsR|j|ƒ}|jrrrrr8QszBaseServer.verify_requestcCs|j||ƒ|j|ƒdS)N)Úfinish_requestr<)rr=r>rrrr9Ys zBaseServer.process_requestcCsdS)Nr)rrrrÚ server_closebszBaseServer.server_closecCs|j|||ƒdS)N)r)rr=r>rrrr?jszBaseServer.finish_requestcCs|j|ƒdS)N)Ú close_request)rr=rrrr<nszBaseServer.shutdown_requestcCsdS)Nr)rr=rrrrArszBaseServer.close_requestcCsHtddtjd�td|tjd�ddl}|jƒtddtjd�dS)Nú-é()Úfilez4Exception happened during processing of request fromr)ÚprintÚsysÚstderrÚ tracebackÚ print_exc)rr=r>rHrrrr;vs  zBaseServer.handle_errorcCs|S)Nr)rrrrÚ __enter__ƒszBaseServer.__enter__cGs |jƒdS)N)r@)rÚargsrrrÚ__exit__†szBaseServer.__exit__)r!)Ú__name__Ú __module__Ú __qualname__r1rr r-r/r)r5r(r4r8r9r@r?r<rAr;rJrLrrrrr�s$-    c@sbeZdZejZejZdZdZ ddd„Z dd„Z dd „Z d d „Z d d „Zdd„Zdd„Zdd„ZdS)réFTc CsTtj|||ƒtj|j|jƒ|_|rPy|jƒ|jƒWn|jƒ‚YnXdS)N)rrr0Úaddress_familyÚ socket_typeÚ server_bindr r@)rrrZbind_and_activaterrrrÁs  zTCPServer.__init__cCs8|jr|jjtjtjdƒ|jj|jƒ|jjƒ|_dS)Né)Úallow_reuse_addressr0Ú setsockoptZ SOL_SOCKETZ SO_REUSEADDRZbindrZ getsockname)rrrrrSÎszTCPServer.server_bindcCs|jj|jƒdS)N)r0ZlistenÚrequest_queue_size)rrrrr ÙszTCPServer.server_activatecCs|jjƒdS)N)r0Úclose)rrrrr@ászTCPServer.server_closecCs |jjƒS)N)r0Úfileno)rrrrrYészTCPServer.filenocCs |jjƒS)N)r0Zaccept)rrrrr6ñszTCPServer.get_requestc Cs4y|jtjƒWntk r$YnX|j|ƒdS)N)r/r0ZSHUT_WRr7rA)rr=rrrr<ùs zTCPServer.shutdown_requestcCs |jƒdS)N)rX)rr=rrrrAszTCPServer.close_requestN)T)rMrNrOr0ZAF_INETrQZ SOCK_STREAMrRrWrUrrSr r@rYr6r<rArrrrrŠs/   c@s:eZdZdZejZdZdd„Zdd„Z dd„Z d d „Z d S) rFi cCs |jj|jƒ\}}||jf|fS)N)r0ZrecvfromÚmax_packet_size)rÚdataZ client_addrrrrr6szUDPServer.get_requestcCsdS)Nr)rrrrr szUDPServer.server_activatecCs|j|ƒdS)N)rA)rr=rrrr<szUDPServer.shutdown_requestcCsdS)Nr)rr=rrrrAszUDPServer.close_requestN) rMrNrOrUr0Z SOCK_DGRAMrRrZr6r r<rArrrrrscsReZdZdZdZdZdZddœdd„Zdd „Zd d „Z d d „Z ‡fdd„Z ‡Z S)ri,NrCF)Úblockingc Csò|jdkrdSxht|jƒ|jkrvy tjddƒ\}}|jj|ƒWqtk r^|jjƒYqtk rrPYqXqWxt|jj ƒD]f}y.|r’dntj }tj||ƒ\}}|jj|ƒWq„tk rÖ|jj|ƒYq„tk rèYq„Xq„WdS)NrTréÿÿÿÿ) Úactive_childrenÚlenÚ max_childrenÚosÚwaitpidÚdiscardÚChildProcessErrorr"r7ÚcopyÚWNOHANG)rr\ÚpidÚ_ÚflagsrrrÚcollect_children,s&  zForkingMixIn.collect_childrencCs |jƒdS)N)rj)rrrrr4OszForkingMixIn.handle_timeoutcCs |jƒdS)N)rj)rrrrr)VszForkingMixIn.service_actionscCsštjƒ}|r8|jdkrtƒ|_|jj|ƒ|j|ƒdSd}z:y|j||ƒd}Wn tk rr|j||ƒYnXWdz|j |ƒWdtj |ƒXXdS)NrTr) rar r^r*ÚaddrAr?r:r;r<Ú_exit)rr=r>rgZstatusrrrr9]s     zForkingMixIn.process_requestcstƒjƒ|j|jd�dS)N)r\)Úsuperr@rjÚ_block_on_close)r)Ú __class__rrr@vs zForkingMixIn.server_close) rMrNrOr1r^r`rnrjr4r)r9r@Ú __classcell__rr)rorr#s#cs8eZdZdZdZdZdd„Zdd„Z‡fdd„Z‡Z S) r FNcCsHz6y|j||ƒWn tk r2|j||ƒYnXWd|j|ƒXdS)N)r?r:r;r<)rr=r>rrrÚprocess_request_thread‡s z%ThreadingMixIn.process_request_threadcCsRtj|j||fd�}|j|_|j rF|jrF|jdkr:g|_|jj|ƒ|jƒdS)N)ÚtargetrK) rZThreadrqÚdaemon_threadsZdaemonrnÚ_threadsÚappendÚstart)rr=r>Útrrrr9”s   zThreadingMixIn.process_requestcs:tƒjƒ|jr6|j}d|_|r6x|D] }|jƒq&WdS)N)rmr@rnrtÚjoin)rZthreadsZthread)rorrr@Ÿs  zThreadingMixIn.server_close) rMrNrOrsrnrtrqr9r@rprr)rorr {s   c@s eZdZdS)rN)rMrNrOrrrrrªsc@s eZdZdS)rN)rMrNrOrrrrr«sc@s eZdZdS)rN)rMrNrOrrrrr­sc@s eZdZdS)rN)rMrNrOrrrrr®sc@seZdZejZdS)rN)rMrNrOr0rrQrrrrr²sc@seZdZejZdS)rN)rMrNrOr0rrQrrrrrµsc@s eZdZdS)rN)rMrNrOrrrrr¸sc@s eZdZdS)rN)rMrNrOrrrrrºsc@s,eZdZdd„Zdd„Zdd„Zdd„Zd S) r c Cs6||_||_||_|jƒz |jƒWd|jƒ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)rMrNrOrrzr{r|rrrrr ¼s c@s,eZdZd ZdZdZdZdd„Zdd„ZdS) r rTrNFcCsz|j|_|jdk r |jj|jƒ|jr:|jjtjtjdƒ|jj d|j ƒ|_ |j dkrdt |jƒ|_n|jj d|j ƒ|_dS)NTÚrbrÚwb)r=Z connectionr1Z settimeoutÚdisable_nagle_algorithmrVr0Z IPPROTO_TCPZ TCP_NODELAYÚmakefileÚrbufsizeÚrfileÚwbufsizeÚ _SocketWriterÚwfile)rrrrrzÿs    zStreamRequestHandler.setupc CsF|jjs.y|jjƒWntjk r,YnX|jjƒ|jjƒdS)N)r…ÚclosedÚflushr0ÚerrorrXr‚)rrrrr| s zStreamRequestHandler.finishr]) rMrNrOr�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&|jj|ƒt|ƒ�}|jSQRXdS)N)r‰ZsendallÚ memoryviewÚnbytes)rÚbZviewrrrÚwrite"s  z_SocketWriter.writecCs |jjƒS)N)r‰rY)rrrrrY'sz_SocketWriter.filenoN)rMrNrOrrŠrŽrYrrrrr„sr„c@seZdZdd„Zdd„ZdS)r cCs2ddlm}|j\|_|_||jƒ|_|ƒ|_dS)Nr)ÚBytesIO)Úior�r=Zpacketr0r‚r…)rr�rrrrz.s  zDatagramRequestHandler.setupcCs|jj|jjƒ|jƒdS)N)r0Zsendtor…Úgetvaluer>)rrrrr|4szDatagramRequestHandler.finishN)rMrNrOrzr|rrrrr *s)$Ú __version__r0r%raÚerrnorFrÚ ImportErrorZdummy_threadingr�rr3rÚ__all__ÚhasattrÚextendrr#ZSelectSelectorrrrrr rrrrrrrrr r r„r rrrrÚ{sZ      n~ X.  .-