Skip to content

Commit b2bcd37

Browse files
committed
Use socket.create_connection() everywhere
Tarantool started to use getaddrinfo() to find suitable address for binding both for IPROTO and CONSOLE ports. A properly implemented TCP client for dual-stack IP network MUST try to check all returned addresses. This fix improves usage of DNS and IPv4/IPv6 protocols for the connector.
1 parent 771a0bd commit b2bcd37

File tree

2 files changed

+7
-11
lines changed

2 files changed

+7
-11
lines changed

tarantool/connection.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -111,9 +111,8 @@ def connect_basic(self):
111111
self.connected = True
112112
if self._socket:
113113
self._socket.close()
114-
self._socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
114+
self._socket = socket.create_connection((self.host, self.port))
115115
self._socket.setsockopt(socket.SOL_TCP, socket.TCP_NODELAY, 1)
116-
self._socket.connect((self.host, self.port))
117116
except socket.error as e:
118117
self.connected = False
119118
raise NetworkError(e)

tests/suites/lib/tarantool_server.py

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,7 @@
1212

1313
def check_port(port, rais=True):
1414
try:
15-
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
16-
sock.connect(("localhost", port))
15+
sock = socket.create_connection(("localhost", port))
1716
except socket.error:
1817
return True
1918
if rais:
@@ -39,22 +38,20 @@ def __init__(self, host, port):
3938
self.host = host
4039
self.port = port
4140
self.is_connected = False
42-
self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
43-
self.socket.setsockopt(socket.SOL_TCP, socket.TCP_NODELAY, 1)
44-
41+
self.socket = None
4542
def connect(self):
46-
self.socket.connect((self.host, self.port))
43+
self.socket = socket.create_connection((self.host, self.port))
44+
self.socket.setsockopt(socket.SOL_TCP, socket.TCP_NODELAY, 1)
4745
self.is_connected = True
4846

4947
def disconnect(self):
5048
if self.is_connected:
5149
self.socket.close()
50+
self.socket = None
5251
self.is_connected = False
5352

5453
def reconnect(self):
5554
self.disconnect()
56-
self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
57-
self.socket.setsockopt(socket.SOL_TCP, socket.TCP_NODELAY, 1)
5855
self.connect()
5956

6057
def opt_reconnect(self):
@@ -63,7 +60,7 @@ def opt_reconnect(self):
6360
Make use of this property and detect whether or not the socket is
6461
dead. Reconnect a dead socket, do nothing if the socket is good."""
6562
try:
66-
if self.socket.recv(0, socket.MSG_DONTWAIT) == '':
63+
if self.socket is None or self.socket.recv(0, socket.MSG_DONTWAIT) == '':
6764
self.reconnect()
6865
except socket.error as e:
6966
if e.errno == errno.EAGAIN:

0 commit comments

Comments
 (0)