1
# Copyright (c) 2001-2004 Twisted Matrix Laboratories.
2
# See LICENSE for details.
5
import types, socket, operator
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
13
from zope.interface import implements
17
def getTcpNoDelay(self):
18
return operator.truth(self.socket.getsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY))
20
def setTcpNoDelay(self, enabled):
21
self.socket.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, enabled)
23
def getTcpKeepAlive(self):
24
return operator.truth(self.socket.getsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE))
26
def setTcpKeepAlive(self, enabled):
27
self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, enabled)
30
return address.IPv4Address('TCP', *(self.socket.getsockname() + ('INET',)))
33
return address.IPv4Address('TCP', *(self.socket.getpeername() + ('INET',)))
35
def getPeerHost(self):
36
return self.socket.getpeername()[0]
38
def getPeerPort(self):
39
return self.socket.getpeername()[1]
41
class ServerSocket(server.ListeningPort.transport_class, TcpMixin):
42
implements(interfaces.ITCPTransport)
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):
49
print "listening on (%s, %s)" % (host, port)
50
if isinstance(port, types.StringTypes):
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)
61
return address.IPv4Address('TCP', *(self.socket.getsockname() + ('INET',)))
63
def buildAddress(self, addr):
64
return address._ServerFactoryIPv4Address('TCP', addr[0], addr[1], 'INET')
66
class ClientSocket(client.SocketConnector.transport_class, TcpMixin):
67
implements(interfaces.ITCPTransport)
69
class Connector(client.SocketConnector):
70
sockinfo = (socket.AF_INET, socket.SOCK_STREAM, 0)
71
transport_class = ClientSocket
73
def _filterRealAddress(self, host):
74
return (host, self.addr[1])
76
def prepareAddress(self):
77
host, port = self.addr
79
print "connecting to (%s, %s)" % (host, port)
80
if isinstance(port, types.StringTypes):
82
port = socket.getservbyname(port, 'tcp')
83
except socket.error, e:
84
raise error.ServiceNameUnknownError(string=str(e))
85
self.addr= (host, port)
87
def resolveAddress(self):
88
host, port = self.addr
92
from twisted.internet import reactor
93
return reactor.resolve(host).addCallback(self._filterRealAddress)
95
def getDestination(self):
96
return address.IPv4Address('TCP', self.addr[0], self.addr[1], 'INET')
98
def buildAddress(self, addr):
99
return address.IPv4Address('TCP', addr[0], addr[1], 'INET')