o b$@sdUdZddlZddlZddlZddlmZmZddlmZddl m Z m Z m Z m Z ddlmZddlmZmZmZddlmZdd lmZdd lmZmZzdd lmZWneyrdZd Z eee j!d fe"d<e#dYnweZe j!fZ dZ$dZ%e&d\Z'Z(e )dZ*e )dZ+ee j,e j-e j.e j/ge RGddde j0e j1eZ2ddZ3ddgZ4dS)z' Reactor that uses IO completion ports N)TupleType) implementer)baseerror interfacesmain)Process) iocpsupporttcpudp) WAIT_TIMEOUT)_ThreadedWin32EventsMixin)failurelog)TLSMemoryBIOFactory._extraInterfacesz|pyOpenSSL 0.10 or newer is required for SSL support in iocpreactor. It is missing, so the reactor will not support SSL APIs.iz#Handler has no getFileHandle methodzFiledescriptor went awayc@seZdZdZddZddZddZdd Zd d Zd d Z ddZ ddZ ddZ d-ddZ d.ddZedurDd-ddZ d.ddZn d-ddZ d.d dZd/d"d#Z $d0d%d&Zd'idddd(dfd)d*Zd+d,ZdS)1 IOCPReactorNcCs"tj|t|_t|_dSN)r ReactorBase__init___iocpCompletionPortportsethandlesselfrrF/usr/lib/python3/dist-packages/twisted/internet/iocpreactor/reactor.pyr?s   zIOCPReactor.__init__cC|j|dSr)raddr handlerrr!addActiveHandleDzIOCPReactor.addActiveHandlecCr"r)rdiscardr$rrr!removeActiveHandleGr'zIOCPReactor.removeActiveHandlecCsd}|dur t}n tttd|}|j|\}}}} |tkr#dS|tkr<|tks-Jt |j |j ||||d7}|t krBdS|jd\}}}}q)z= Poll the IO completion port for new events. rNr) MAX_TIMEOUTminintrgetEventr KEY_WAKEUP KEY_NORMALrcallWithLoggerowner_callEventCallbackEVENTS_PER_LOOP)r timeoutprocessed_eventsrcnumByteskeyevtrrr! doIterationJs$ zIOCPReactor.doIterationcCs|j}d}z ||||t|dd}|st}n|dkrt}|r$WdSWnty8td}t Ynw|rE| t |dSdS)N getFileHandler*) r2callbackgetattr _NO_GETHANDLE _NO_FILEDESC BaseExceptionsysexc_inforerrloseConnectionrFailure)r r7r8r:r2whyhandfnrrr!r3vs&     zIOCPReactor._callEventCallbackcCsdSrrrrrr! installWakerszIOCPReactor.installWakercCs|jdtddS)Nr)r postEventr/rrrr!wakeUpszIOCPReactor.wakeUpcCs|j|tdSr)r addHandler0r$rrr!registerHandleszIOCPReactor.registerHandlecCst||}|||Sr)socketrNfileno)r afstypesktrrr! createSockets zIOCPReactor.createSocket2cCt|||||}||S)zI @see: twisted.internet.interfaces.IReactorTCP.listenTCP )r PortstartListening)r rfactorybacklog interfaceprrr! listenTCPszIOCPReactor.listenTCPcCs t||||||}||S)zJ @see: twisted.internet.interfaces.IReactorTCP.connectTCP )r Connectorconnect)r hostrrZr5 bindAddresscrrr! connectTCPszIOCPReactor.connectTCPcCs"||t|d|||}d|_|S)zQ @see: twisted.internet.interfaces.IReactorSSL.listenSSL FTLS)r^r_typer rrZcontextFactoryr[r\rrr! listenSSLs zIOCPReactor.listenSSLcCs|||t|d|||S)zR @see: twisted.internet.interfaces.IReactorSSL.connectSSL T)rerr rbrrZrir5rcrrr! connectSSLs zIOCPReactor.connectSSLcCtd)z Non-implementation of L{IReactorSSL.listenSSL}. Some dependency is not satisfied. This implementation always raises L{NotImplementedError}. |pyOpenSSL 0.10 or newer is required for SSL support in iocpreactor. It is missing, so the reactor does not support SSL APIs.NotImplementedErrorrhrrr!rjscCrm)z Non-implementation of L{IReactorSSL.connectSSL}. Some dependency is not satisfied. This implementation always raises L{NotImplementedError}. rnrorkrrr!rls cCrW)z Connects a given L{DatagramProtocol} to the given numeric UDP port. @returns: object conforming to L{IListeningPort}. )r rXrY)r rprotocolr\ maxPacketSizer]rrr! listenUDPszIOCPReactor.listenUDPFcCs t||||||}||S)z Connects a given DatagramProtocol to the given numeric UDP port. EXPERIMENTAL. @returns: object conforming to IListeningPort. )r MulticastPortrY)r rrrr\rslistenMultipler]rrr!listenMulticasts  zIOCPReactor.listenMulticastrrc CsN|durtd|durtd|rtd| durtdt||||||S)z" Spawn a process. Nz,Setting UID is unsupported on this platform.z,Setting GID is unsupported on this platform.z&PTYs are unsupported on this platform.zGCustom child file descriptor mappings are unsupported on this platform.) ValueErrorr ) r processProtocol executableargsenvpathuidgidusePTYchildFDsrrr! spawnProcessszIOCPReactor.spawnProcesscCst|j}|j|Sr)listrclear)r resrrr! removeAlls  zIOCPReactor.removeAll)rUrV)r_N)rVrq)rVrqF)__name__ __module__ __qualname__rrr&r)r;r3rJrLrNrTr^rerrjrlrtrwrrrrrr!r2s@ ,       rcCst}t|dSr)rrinstallReactor)rrrr!installsr)5__doc__rOrCwarningstypingrrzope.interfacertwisted.internetrrrrtwisted.internet._dumbwin32procr twisted.internet.iocpreactorr rr r "twisted.internet.iocpreactor.constr "twisted.internet.win32eventreactorrtwisted.pythonrrtwisted.protocols.tlsr_TLSMemoryBIOFactory ImportErrorr IReactorSSL__annotations__warnr+r4ranger0r/ConnectionFdescWentAwayr@rA IReactorTCP IReactorUDPIReactorMulticastIReactorProcess_SignalReactorMixinrrr__all__rrrr!sT           c