Python IPv6 support for TSocket
Summary: Contributed by Paul Saab of Powerset
Reviewed By: mcslee
Test Plan: Python test stuff
git-svn-id: https://svn.apache.org/repos/asf/incubator/thrift/trunk@665153 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/lib/py/src/transport/TSocket.py b/lib/py/src/transport/TSocket.py
index 280d6aa..e6168e2 100644
--- a/lib/py/src/transport/TSocket.py
+++ b/lib/py/src/transport/TSocket.py
@@ -30,8 +30,17 @@
def open(self):
try:
- self.handle = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
- self.handle.connect((self.host, self.port))
+ res0 = socket.getaddrinfo(self.host, self.port, socket.AF_UNSPEC, socket.SOCK_STREAM)
+ for res in res0:
+ self.handle = socket.socket(res[0], res[1])
+ try:
+ self.handle.connect(res[4])
+ except socket.error, e:
+ if res is not res0[-1]:
+ continue
+ else:
+ raise e
+ break
except socket.error, e:
raise TTransportException(TTransportException.NOT_OPEN, 'Could not connect to %s:%d' % (self.host, self.port))
@@ -68,11 +77,16 @@
self.handle = None
def listen(self):
- self.handle = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+ res0 = socket.getaddrinfo(None, self.port, socket.AF_UNSPEC, socket.SOCK_STREAM)
+ for res in res0:
+ if res[0] is socket.AF_INET6 or res is res0[-1]:
+ break
+
+ self.handle = socket.socket(res[0], res[1])
self.handle.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
if hasattr(self.handle, 'set_timeout'):
self.handle.set_timeout(None)
- self.handle.bind(('', self.port))
+ self.handle.bind(res[4])
self.handle.listen(128)
def accept(self):