mς MγΈEc@s dkZdkZdkZdkZdkZdklZdefd„ƒYZei djo deei fd„ƒYZ ndeei fd„ƒYZ dS(N(s positive_idt _triggerbasecBsztZdZeZd„Zd„Zd„Zd„Zd„Z d„Z d„Z ed„Z d „Z d „Zd „ZRS( s9OS-independent base class for OS-dependent trigger class.cCs%t|_tiƒ|_g|_dS(N(tFalsetselft_closedtthreadt allocate_locktlocktthunks(R((t//data/zmath/zope/lib/python/ZEO/zrpc/trigger.pyt__init__=s cCsdS(Ni((R((RtreadableIscCsdS(Ni((R((RtwritableLscCsdS(N((R((Rthandle_connectOscCs|iƒdS(N(Rtclose(R((Rt handle_closeRscCs/|ip!t|_|iƒ|iƒndS(N(RRtTruet del_channelt_close(R((RR Ys   cCs t‚dS(N(tNotImplementedError(R((RR_scCsK|o6|iiƒz|ii|ƒWd|iiƒXn|iƒdS(N(tthunkRRtacquireRtappendtreleaset_physical_pull(RR((Rt pull_triggerbs cCs t‚dS(N(R(R((RRmscCs°y|idƒWntij o dSnX|iiƒz`xP|iD]E}y |ƒWqHti ƒ\}}}}d|||fGHqHXqHWg|_Wd|iiƒXdS(Ni s&exception in trigger thunk: (%s:%s %s)(RtrecvtsocketterrorRRRRtasyncoretcompact_tracebacktniltttvttbinfoR(RR!RRRR ((Rt handle_readps      cCsd|it|ƒfS(Ns(Rtkindt positive_id(R((Rt__repr__‚s(t__name__t __module__t__doc__tNoneR#R R R R RR RRRR"R%(((RR8s         tposixttriggercBs,tZdZdd„Zd„Zd„ZRS(NtpipecCsCti|ƒtiƒ\}|_|_ti i|||ƒdS(N( RR RtosR,trR+t_fdsRtfile_dispatchertmap(RR1R.((RR Šs cCs.x|iD]}ti|ƒq Wg|_dS(N(RR/tfdR-R (RR2((RRs cCsti|idƒdS(Ntx(R-twriteRR+(R((RR”s(R&R'R#R)R RR(((RR+‡s  cBs,tZdZdd„Zd„Zd„ZRS(Ntloopbackc Cs>ti|ƒtiƒ}|ititidƒd}xΔ|d7}tiƒ}|i dƒ|i ƒ}|i dƒy|i|ƒPWq;tij o_}|dtijo‚n|djo$|iƒ|iƒtdƒ‚n|iƒq;Xq;W|iƒ\}}|iƒ||_tii|||ƒdS(Niis 127.0.0.1i sCannot bind trigger!(s 127.0.0.1i(RR RRtwt setsockoptt IPPROTO_TCPt TCP_NODELAYtcounttatbindt getsocknametconnect_addresstlistentconnectRtdetailterrnot WSAEADDRINUSER t BindErrortacceptR.taddrR+Rt dispatcherR1( RR1R:RAR.R;R6R>RF((RR žs4            cCs|iiƒ|iiƒdS(N(RRR R+(R((RRΥs cCs|iidƒdS(NR3(RR+tsend(R((RRΪs(R&R'R#R)R RR(((RR+›s 7 ( RR-RRRBt ZODB.utilsR$tobjectRtnameR0R+RG(RRRRBR+R$R-R((Rt?s      #M