Your IP : 172.28.240.42


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


}3Nc@s9dZddlZddlZddlZddlZddlZddlmZddlm	Z	m
Z
mZmZddl
mZddlmZmZddlmZddlmZdd	lmZdd
lmZddlmZmZdejfd
YZdfdYZdeefdYZdS(s
UDP support for IOCP reactor
iN(t
implements(tdefertaddressterrort
interfaces(tisIPAddress(tlogtfailure(tERROR_IO_PENDING(tERROR_CONNECTION_REFUSED(tERROR_PORT_UNREACHABLE(tIReadWriteHandle(tiocpsupporttabstracttPortcBseZdZeeejejeje	j
Ze	jZ
eZdZddddZdZdZdZdZdZd	Zd
ZdZdZdd
ZdZdZdZdZ dZ!ddZ"dZ#dZ$dZ%RS(s*
    UDP port, listening for packets.
    ti cCs||_||_||_||_|jd|_tjj	||t
j
|j|j}t
j|j}t
j||_t
jtjd|_dS(s>
        Initialize with a numeric port to listen on.
        tiN(tporttprotocoltreadBufferSizet	interfacet	setLogStrtNonet_connectedAddrR
t
FileHandlet__init__tsockett
addressFamilyt
socketTypet_iocpt
maxAddrLentfilenotAllocateReadBuffert
addressBuffertstructtcalcsizetaddressLengthBuffer(tselfRtprotoRt
maxPacketSizetreactortskttaddrLen((sD/usr/lib/python2.7/dist-packages/twisted/internet/iocpreactor/udp.pyR)s				
	cCs;|jdk	r&d|jj|jfSd|jjfSdS(Ns
<%s on %s>s<%s not connected>(t_realPortNumberRRt	__class__(R%((sD/usr/lib/python2.7/dist-packages/twisted/internet/iocpreactor/udp.pyt__repr__?scCs|jS(s)
        Return a socket object.
        (R(R%((sD/usr/lib/python2.7/dist-packages/twisted/internet/iocpreactor/udp.pyt	getHandleGscCs|j|jdS(s
        Create and bind my socket, and begin listening on it.

        This is called on unserialization, and must be called after creating a
        server to begin listening on the specified port.
        N(t_bindSockett_connectToProtocol(R%((sD/usr/lib/python2.7/dist-packages/twisted/internet/iocpreactor/udp.pytstartListeningNs
cCs|jj|j|jS(N(R(tcreateSocketRR(R%((sD/usr/lib/python2.7/dist-packages/twisted/internet/iocpreactor/udp.pyR2YscCsy)|j}|j|j|jfWn1tjk
r\}tj|j|j|fnX|jd|_t	j
d|j|j|jft
|_||_|jj|_dS(Nis%s starting on %s(R2tbindRRRRtCannotListenErrortgetsocknameR+Rtmsgt
_getLogPrefixRtTruet	connectedRt
getFileHandle(R%R)tle((sD/usr/lib/python2.7/dist-packages/twisted/internet/iocpreactor/udp.pyR/]s			cCs.|jj||j|jj|dS(N(RtmakeConnectiontstartReadingR(taddActiveHandle(R%((sD/usr/lib/python2.7/dist-packages/twisted/internet/iocpreactor/udp.pyR0ps
cCs-|jr)|j||||jndS(N(treadingt
handleReadtdoRead(R%trctbytestevt((sD/usr/lib/python2.7/dist-packages/twisted/internet/iocpreactor/udp.pytcbReadvs	cCs|tjtjttfkr:|jr|jjqns|ritj	dtj
j|d|fnDy0|jjt
|j| tj|jWntjnXdS(Nserror in recvfrom -- %s (%s)s
unknown error(terrnotWSAECONNREFUSEDt
WSAECONNRESETR	R
RRtconnectionRefusedRR6t	errorcodetgettdatagramReceivedtstrtbuffRtmakesockaddrt	addr_buffterr(R%RBRCRD((sD/usr/lib/python2.7/dist-packages/twisted/internet/iocpreactor/udp.pyR@|s		 cCstj|j|}|jd|_}|j|_}|j|_}tj	|j
||||\}}|r|tkr|j|||ndS(Ni(
RtEventREt_readBuffersRNR!RPR$t
addr_len_bufftrecvfromR:RR@(R%RDRNRPRTRBRC((sD/usr/lib/python2.7/dist-packages/twisted/internet/iocpreactor/udp.pyRAscCs|jr|d|jfks$ty|jj|SWqtjk
r}|jd}|tjkrv|j	|S|tj
krtjdq|tjtj
ttfkr|jjqqXn|dkst|djddjstjdtddny|jj||SWntjk
r}|jd}|tjkrk|j	||S|tj
krtjdq|tjtj
ttfkrdSnXdS(	s~
        Write a datagram.

        @param addr: should be a tuple (ip, port), can be None in connected
        mode.
        ismessage too longt.Rs.Please only pass IPs to write(), not hostnamest
stackleveliN(RRtAssertionErrorRtsendRtargsRFtWSAEINTRtwritetWSAEMSGSIZEtMessageLengthErrorRGRHR	R
RRItreplacetisdigittwarningstwarntDeprecationWarningtsendto(R%tdatagramtaddrtsetno((sD/usr/lib/python2.7/dist-packages/twisted/internet/iocpreactor/udp.pyR\s<	


	
cCs|jdj||dS(NR(R\tjoin(R%tseqRf((sD/usr/lib/python2.7/dist-packages/twisted/internet/iocpreactor/udp.pyt
writeSequencescCsY|jrtdnt|s0tdn||f|_|jj||fdS(s-
        'Connect' to remote server.
        s\already connected, reconnecting is not currently supported (talk to itamar if you want this)s/please pass only IP addresses, not domain namesN(RtRuntimeErrorRt
ValueErrorRtconnect(R%thostR((sD/usr/lib/python2.7/dist-packages/twisted/internet/iocpreactor/udp.pyRns	cCs@|j|jj||jr<|jjd|jndS(Ni(tstopReadingR(tremoveActiveHandleR9t	callLatertconnectionLost(R%((sD/usr/lib/python2.7/dist-packages/twisted/internet/iocpreactor/udp.pyt_loseConnections
	cCs3|jrtj}|_nd}|j|S(N(R9RtDeferredtdRRt(R%tresult((sD/usr/lib/python2.7/dist-packages/twisted/internet/iocpreactor/udp.pyt
stopListenings
	
cCs$tjdtdd|jdS(Ns-Please use stopListening() to disconnect portRWi(RaRbRcRx(R%((sD/usr/lib/python2.7/dist-packages/twisted/internet/iocpreactor/udp.pytloseConnections	
cCstjd|jd|_tjj|||jj|j	j
|`	|`t|dr~|j
jd|`
ndS(s&
        Cleans up my socket.
        s(UDP Port %s Closed)RvN(RR6R+RR
RRsRtdoStopRtcloseR:thasattrRvtcallback(R%treason((sD/usr/lib/python2.7/dist-packages/twisted/internet/iocpreactor/udp.pyRss	

cCs#|j|j}d||_dS(sP
        Initialize the C{logstr} attribute to be used by C{logPrefix}.
        s%s (UDP)N(R7Rtlogstr(R%t	logPrefix((sD/usr/lib/python2.7/dist-packages/twisted/internet/iocpreactor/udp.pyRscCs|jS(sK
        Returns the name of my class, to prefix log entries with.
        (R(R%((sD/usr/lib/python2.7/dist-packages/twisted/internet/iocpreactor/udp.pyRscCstjd|jjS(si
        Returns an IPv4Address.

        This indicates the address from which I am connecting.
        tUDP(RtIPv4AddressRR5(R%((sD/usr/lib/python2.7/dist-packages/twisted/internet/iocpreactor/udp.pytgetHost
sN(&t__name__t
__module__t__doc__RRRtIListeningPortt
IUDPTransportt
ISystemHandleRtAF_INETRt
SOCK_DGRAMRtFalsetdynamicReadBuffersRR+RR-R.R1R2R/R0RER@RAR\RkRnRtRxRyRsRRR(((sD/usr/lib/python2.7/dist-packages/twisted/internet/iocpreactor/udp.pyRs:
											
-								tMulticastMixincBsweZdZdZdZdZdZdZdZdZ	dd	Z
d
ZdZddZ
RS(
s,
    Implement multicast functionality.
    cCs4|jjtjtj}tjtjd|S(Ns@i(Rt
getsockoptt
IPPROTO_IPtIP_MULTICAST_IFt	inet_ntoaR"tpack(R%R((sD/usr/lib/python2.7/dist-packages/twisted/internet/iocpreactor/udp.pytgetOutgoingInterfacescCs|jj|j|jS(s.
        Returns Deferred of success.
        (R(tresolvetaddCallbackt
_setInterface(R%Rf((sD/usr/lib/python2.7/dist-packages/twisted/internet/iocpreactor/udp.pytsetOutgoingInterface"scCs/tj|}|jjtjtj|dS(Ni(Rt	inet_atont
setsockoptRR(R%RfR((sD/usr/lib/python2.7/dist-packages/twisted/internet/iocpreactor/udp.pyR)scCs|jjtjtjS(N(RRRtIP_MULTICAST_LOOP(R%((sD/usr/lib/python2.7/dist-packages/twisted/internet/iocpreactor/udp.pytgetLoopbackMode/scCs;tjdtj|}|jjtjtj|dS(Ntb(R"RtoperatorttruthRRRR(R%tmode((sD/usr/lib/python2.7/dist-packages/twisted/internet/iocpreactor/udp.pytsetLoopbackMode4scCs|jjtjtjS(N(RRRtIP_MULTICAST_TTL(R%((sD/usr/lib/python2.7/dist-packages/twisted/internet/iocpreactor/udp.pytgetTTL:scCs2tjd|}|jjtjtj|dS(NtB(R"RRRRR(R%tttl((sD/usr/lib/python2.7/dist-packages/twisted/internet/iocpreactor/udp.pytsetTTL?sRcCs"|jj|j|j|dS(sF
        Join a multicast group. Returns Deferred of success.
        i(R(RRt
_joinAddr1(R%RfR((sD/usr/lib/python2.7/dist-packages/twisted/internet/iocpreactor/udp.pyt	joinGroupDscCs"|jj|j|j||S(N(R(RRt
_joinAddr2(R%RfRRi((sD/usr/lib/python2.7/dist-packages/twisted/internet/iocpreactor/udp.pyRLscCstj|}tj|}|r0tj}n	tj}y!|jjtj|||Wn2tjk
r}tjtj	|||j
SXdS(N(RRtIP_ADD_MEMBERSHIPtIP_DROP_MEMBERSHIPRRRRtFailuretMulticastJoinErrorRZ(R%RRfRitcmdte((sD/usr/lib/python2.7/dist-packages/twisted/internet/iocpreactor/udp.pyRQs	!cCs"|jj|j|j|dS(sD
        Leave multicast group, return Deferred of success.
        i(R(RRR(R%RfR((sD/usr/lib/python2.7/dist-packages/twisted/internet/iocpreactor/udp.pyt
leaveGroup_s(RRRRRRRRRRRRRR(((sD/usr/lib/python2.7/dist-packages/twisted/internet/iocpreactor/udp.pyRs									t
MulticastPortcBs9eZdZeejdddedZdZ	RS(s.
    UDP Port that supports multicasting.
    Ri cCs)tj||||||||_dS(N(RRtlistenMultiple(R%RR&RR'R(R((sD/usr/lib/python2.7/dist-packages/twisted/internet/iocpreactor/udp.pyRpscCsctj|}|jr_|jtjtjdttdr_|jtjtjdq_n|S(NitSO_REUSEPORT(	RR2RRRt
SOL_SOCKETtSO_REUSEADDRR|R(R%R)((sD/usr/lib/python2.7/dist-packages/twisted/internet/iocpreactor/udp.pyR2vs	N(
RRRRRtIMulticastTransportRRRR2(((sD/usr/lib/python2.7/dist-packages/twisted/internet/iocpreactor/udp.pyRhs

( RRRR"RaRFtzope.interfaceRttwisted.internetRRRRttwisted.internet.abstractRttwisted.pythonRRt"twisted.internet.iocpreactor.constRR	R
t'twisted.internet.iocpreactor.interfacesRttwisted.internet.iocpreactorRRR
RRRR(((sD/usr/lib/python2.7/dist-packages/twisted/internet/iocpreactor/udp.pyt<module>s<"Q