Your IP : 172.28.240.42


Current Path : /usr/lib/python2.7/dist-packages/twisted/internet/
Upload File :
Current File : //usr/lib/python2.7/dist-packages/twisted/internet/selectreactor.pyc


6Mc@s0dZddlmZddlZddlZddlZddlmZmZddl	m
Z
ddlmZddl
mZddlmZdd	lmZdd
ZedkreZn	ejZyddlmZWnek
reZnXeZd
ejefdYZdZdgZdS(s
Select reactor
i(tsleepN(tEINTRtEBADF(t
implements(t
IReactorFDSet(t	posixbase(tlog(tplatformTypecCs|p	|sG|dkr!d}nt|d}t|gggfS|dks_|dkrhd}ntj||||\}}}|||gfS(sWin32 select wrapper.g{Gz?gMbP?g?N(tNonetminRtselect(trtwtettimeout((sB/usr/lib/python2.7/dist-packages/twisted/internet/selectreactor.pytwin32selects	

	!twin32(t_ThreadedWin32EventsMixint
SelectReactorcBseZdZeedZdZdZeZdZ	dZ
dZdZdZ
d	Zd
ZdZRS(s
    A select() based reactor - runs on all POSIX platforms and on Win32.

    @ivar _reads: A dictionary mapping L{FileDescriptor} instances to arbitrary
        values (this is essentially a set).  Keys in this dictionary will be
        checked for read events.

    @ivar _writes: A dictionary mapping L{FileDescriptor} instances to
        arbitrary values (this is essentially a set).  Keys in this dictionary
        will be checked for writability.
    cCs&i|_i|_tjj|dS(sV
        Initialize file descriptor tracking dictionaries and the base class.
        N(t_readst_writesRtPosixReactorBaset__init__(tself((sB/usr/lib/python2.7/dist-packages/twisted/internet/selectreactor.pyRCs		cCstjd|jj}|jj}|jj|jjx|j|f|j|ffD]\}}xu|D]m}y#tj|g|g|gdWn7tk
r}tjd||j||t	qwXd||<qwWqdWdS(Ns1Malformed file descriptor found.  Preening lists.isbad descriptor %si(
RtmsgRtkeysRtclearR
t	Exceptiont_disconnectSelectabletFalse(RtreaderstwriterstselDicttselListt
selectableR
((sB/usr/lib/python2.7/dist-packages/twisted/internet/selectreactor.pyt_preenDescriptorsLs



#c	Csy4t|jj|jjg|\}}}Wntk
rR|jdStk
rwtj|jdSt	j
tj
tfk
r}|j
ddkr|jr|jrdSq|j
dtkrdS|j
dtkr|jdSnX|j}tj}xn|d|jf|d|jffD]H\}}	}
x6|D].}||
krjqRn|||||	tqRWq<WdS(s
        Run one iteration of the I/O monitor loop.

        This will run all selectables who had input or output readiness
        waiting for them.
        NiitdoReadtdoWrite(ii(t_selectRRRt
ValueErrorR#t	TypeErrorRterrR
terrortsockettIOErrortargsRRt_doReadOrWritetcallWithLoggertdict(RRRRtignoredtset_drdwt_logruntselectablestmethodtfdsetR"((sB/usr/lib/python2.7/dist-packages/twisted/internet/selectreactor.pytdoSelect^s<





		"
cCs`yt||}Wn!tjd}tjnX|r\|j|||dkndS(NiR$(tgetattrtsystexc_infoRR)R(RR"R6R0twhy((sB/usr/lib/python2.7/dist-packages/twisted/internet/selectreactor.pyR.scCsd|j|<dS(sR
        Add a FileDescriptor for notification of data available to read.
        iN(R(Rtreader((sB/usr/lib/python2.7/dist-packages/twisted/internet/selectreactor.pyt	addReaderscCsd|j|<dS(sS
        Add a FileDescriptor for notification of data available to write.
        iN(R(Rtwriter((sB/usr/lib/python2.7/dist-packages/twisted/internet/selectreactor.pyt	addWriterscCs ||jkr|j|=ndS(sQ
        Remove a Selectable for notification of data available to read.
        N(R(RR=((sB/usr/lib/python2.7/dist-packages/twisted/internet/selectreactor.pytremoveReaderscCs ||jkr|j|=ndS(sR
        Remove a Selectable for notification of data available to write.
        N(R(RR?((sB/usr/lib/python2.7/dist-packages/twisted/internet/selectreactor.pytremoveWriterscCs|j|j|jS(N(t
_removeAllRR(R((sB/usr/lib/python2.7/dist-packages/twisted/internet/selectreactor.pyt	removeAllscCs
|jjS(N(RR(R((sB/usr/lib/python2.7/dist-packages/twisted/internet/selectreactor.pyt
getReadersscCs
|jjS(N(RR(R((sB/usr/lib/python2.7/dist-packages/twisted/internet/selectreactor.pyt
getWriterss(t__name__t
__module__t__doc__RRRR#R8tdoIterationR.R>R@RARBRDRERF(((sB/usr/lib/python2.7/dist-packages/twisted/internet/selectreactor.pyR5s
				4								cCs't}ddlm}||dS(sIConfigure the twisted mainloop to be run using the select() reactor.
    i(tinstallReactorN(Rttwisted.internet.mainRK(treactorRK((sB/usr/lib/python2.7/dist-packages/twisted/internet/selectreactor.pytinstalls	RN(RIttimeRR:R
R+terrnoRRtzope.interfaceRttwisted.internet.interfacesRttwisted.internetRttwisted.pythonRttwisted.python.runtimeRRRR&t"twisted.internet.win32eventreactorRtImportErrortobjectt
_extraBaseRRRNt__all__(((sB/usr/lib/python2.7/dist-packages/twisted/internet/selectreactor.pyt<module>s($