U Ä:âe jã @sdZddlZddlZddlZddlZddlZddlmZddlm 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„deƒZGdd„dƒZGd d „d ƒZe edƒrJGd!d„deeƒZGd"d„deeƒZGd#d„deeƒZGd$d „d eeƒZe edƒ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 ||_||_t ¡|_d|_dS©NF)Úserver_addressÚRequestHandlerClassÚ threadingÚEventÚ_BaseServer__is_shut_downÚ_BaseServer__shutdown_request)Úselfrr©rú1/usr/local/python38/lib/python3.8/socketserver.pyÚ__init__Ès zBaseServer.__init__cCsdS©Nr©rrrr Úserver_activateÏszBaseServer.server_activateçà?c Cst|j ¡zRtƒB}| |tj¡|jsP| |¡}|jr:qP|rF|  ¡|  ¡q"W5QRXW5d|_|j ¡XdSr) rÚclearrÚsetÚ_ServerSelectorÚregisterÚ selectorsÚ EVENT_READÚselectÚ_handle_request_noblockÚservice_actions)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_actionsc Cs¸|j ¡}|dkr|j}n|jdk r0t||jƒ}|dk rBtƒ|}tƒf}| |tj¡|  |¡}|rz|  ¡W5QR£S|dk rX|tƒ}|dkrX|  ¡W5QR£SqXW5QRXdS)Nr) ÚsocketÚ gettimeoutÚtimeoutÚminÚtimer(r)r*r+r,r-Úhandle_timeout)rr7Údeadliner/r0rrr Úhandle_requests       zBaseServer.handle_requestcCs–z| ¡\}}Wntk r&YdSX| ||¡rˆz| ||¡Wq’tk rn| ||¡| |¡Yq’| |¡‚Yq’Xn | |¡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 happened 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$-    c@sbeZdZejZejZdZdZ ddd„Z dd„Z dd „Z d d „Z d d „Zdd„Zdd„Zdd„ZdS)réFTcCsTt |||¡t |j|j¡|_|rPz| ¡| ¡Wn| ¡‚YnXdSr")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_requestcCs4z| tj¡Wntk r$YnX| |¡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/   c@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 rscsReZdZdZdZdZdZddœdd„Zd d „Zd d „Z d d„Z ‡fdd„Z ‡Z S)ri,Né(TF©Úblockingc Csì|jdkrdSt|jƒ|jkrvz t dd¡\}}|j |¡Wqtk r\|j ¡Yqtk rrYqvYqXq|j  ¡D]f}z.|rŽdntj }t ||¡\}}|j |¡Wq€tk rÒ|j |¡Yq€tk räYq€Xq€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|jdkrtƒ|_|j |¡| |¡dSd}z:z| ||¡d}Wn t k rr|  ||¡YnXW5z| |¡W5t |¡XXdS)Nr\r) rvr rsr'ÚaddrJÚ_exitrCrGrArB)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#cs4eZdZ‡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 Ú Šsz _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 CsHz6z| ||¡Wn tk r2| ||¡YnXW5| |¡XdSr")rCrGrArBrDrrr Ú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) rUrVrWrœr…r•r—r–r@rHrˆrrr†r r ˜s   c@s eZdZdS)rN©rUrVrWrrrr rÁsc@s eZdZdS)rNrŸrrrr rÂsc@s eZdZdS)rNrŸrrrr rÄsc@s eZdZdS)rNrŸrrrr rÅsc@seZdZejZdS)rN©rUrVrWr5rrYrrrr rÉsc@seZdZejZdS)rNr rrrr rÌsc@s eZdZdS)rNrŸrrrr rÏsc@s eZdZdS)rNrŸrrrr rÑsc@s,eZdZdd„Zdd„Zdd„Zdd„Zd S) r cCs6||_||_||_| ¡z | ¡W5| ¡XdSr")rErFÚserverÚsetupÚfinishÚhandle)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 c@s,eZdZdZdZdZdZdd„Zdd„ZdS) r rrrNFcCsz|j|_|jdk r |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.setupcCsF|jjs.z|j ¡Wntjk r,YnX|j ¡|j ¡dSr")r±ÚclosedÚflushr5Úerrorrer®r#rrr r£#s zStreamRequestHandler.finish) rUrVrWr­r¯r7r©r¢r£rrrr r s   c@s,eZdZdd„Zdd„Zdd„Zdd„Zd S) r°cCs ||_dSr")Ú_sock)rÚsockrrr r!3sz_SocketWriter.__init__cCsdSr2rr#rrr Úwritable6sz_SocketWriter.writablec Cs2|j |¡t|ƒ}|jW5QR£SQRXdSr")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 As)$Ú __version__r5r*rvrNrr¿rr9rÚ__all__ÚhasattrÚextendrr(ÚSelectSelectorrrrrÚlistr‰r•r rrrrrrrrr r r°r rrrr Ú{s`  ý  þ n~ X (  .-