~landscape/zope3/ztk-1.1.3

« back to all changes in this revision

Viewing changes to src/twisted/internet/iocpreactor/tcp.py

  • Committer: Andreas Hasenack
  • Date: 2009-07-20 17:49:16 UTC
  • Revision ID: andreas@canonical.com-20090720174916-g2tn6qmietz2hn0u
Revert twisted removal, it breaks several dozen tests [trivial]

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# Copyright (c) 2001-2004 Twisted Matrix Laboratories.
 
2
# See LICENSE for details.
 
3
 
 
4
 
 
5
import types, socket, operator
 
6
 
 
7
from twisted.internet.abstract import isIPAddress # would rather not import "abstract"
 
8
from twisted.internet import defer, interfaces, address, error
 
9
from twisted.python import log
 
10
 
 
11
import server, client
 
12
import iocpdebug
 
13
from zope.interface import implements
 
14
 
 
15
 
 
16
class TcpMixin:
 
17
    def getTcpNoDelay(self):
 
18
        return operator.truth(self.socket.getsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY))
 
19
 
 
20
    def setTcpNoDelay(self, enabled):
 
21
        self.socket.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, enabled)
 
22
 
 
23
    def getTcpKeepAlive(self):
 
24
        return operator.truth(self.socket.getsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE))
 
25
 
 
26
    def setTcpKeepAlive(self, enabled):
 
27
        self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, enabled)
 
28
 
 
29
    def getHost(self):
 
30
        return address.IPv4Address('TCP', *(self.socket.getsockname() + ('INET',)))
 
31
 
 
32
    def getPeer(self):
 
33
        return address.IPv4Address('TCP', *(self.socket.getpeername() + ('INET',)))
 
34
 
 
35
    def getPeerHost(self):
 
36
        return self.socket.getpeername()[0]
 
37
 
 
38
    def getPeerPort(self):
 
39
        return self.socket.getpeername()[1]
 
40
 
 
41
class ServerSocket(server.ListeningPort.transport_class, TcpMixin):
 
42
    implements(interfaces.ITCPTransport)
 
43
 
 
44
class Port(server.ListeningPort):
 
45
    sockinfo = (socket.AF_INET, socket.SOCK_STREAM, 0)
 
46
    transport_class = ServerSocket
 
47
    def __init__(self, (host, port), factory, backlog):
 
48
        if iocpdebug.debug:
 
49
            print "listening on (%s, %s)" % (host, port)
 
50
        if isinstance(port, types.StringTypes):
 
51
            try:
 
52
                port = socket.getservbyname(port, 'tcp')
 
53
            except socket.error, e:
 
54
                raise error.ServiceNameUnknownError(string=str(e))
 
55
        server.ListeningPort.__init__(self, (host, port), factory, backlog)
 
56
 
 
57
    def getOwnPort(self):
 
58
        return self.addr[1]
 
59
 
 
60
    def getHost(self):
 
61
        return address.IPv4Address('TCP', *(self.socket.getsockname() + ('INET',)))
 
62
 
 
63
    def buildAddress(self, addr):
 
64
        return address._ServerFactoryIPv4Address('TCP', addr[0], addr[1], 'INET')
 
65
 
 
66
class ClientSocket(client.SocketConnector.transport_class, TcpMixin):
 
67
    implements(interfaces.ITCPTransport)
 
68
 
 
69
class Connector(client.SocketConnector):
 
70
    sockinfo = (socket.AF_INET, socket.SOCK_STREAM, 0)
 
71
    transport_class = ClientSocket
 
72
 
 
73
    def _filterRealAddress(self, host):
 
74
        return (host, self.addr[1])
 
75
 
 
76
    def prepareAddress(self):
 
77
        host, port = self.addr
 
78
        if iocpdebug.debug:
 
79
            print "connecting to (%s, %s)" % (host, port)
 
80
        if isinstance(port, types.StringTypes):
 
81
            try:
 
82
                port = socket.getservbyname(port, 'tcp')
 
83
            except socket.error, e:
 
84
                raise error.ServiceNameUnknownError(string=str(e))
 
85
        self.addr= (host, port)
 
86
    
 
87
    def resolveAddress(self):
 
88
        host, port = self.addr
 
89
        if isIPAddress(host):
 
90
            return self.addr
 
91
        else:
 
92
            from twisted.internet import reactor
 
93
            return reactor.resolve(host).addCallback(self._filterRealAddress)
 
94
 
 
95
    def getDestination(self):
 
96
        return address.IPv4Address('TCP', self.addr[0], self.addr[1], 'INET')
 
97
 
 
98
    def buildAddress(self, addr):
 
99
        return address.IPv4Address('TCP', addr[0], addr[1], 'INET')
 
100