Skip to content

Commit e9b3234

Browse files
committed
THRIFT-3682 Do not reuse refused sockets in test scripts
Client: Test Patch: Nobuaki Sukegawa This closes apache#902
1 parent f295284 commit e9b3234

File tree

2 files changed

+26
-15
lines changed

2 files changed

+26
-15
lines changed

test/crossrunner/run.py

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -129,11 +129,16 @@ def run_test(testdir, logdir, test_dict, max_retry, async=True):
129129
def ensure_socket_open(proc, port, max_delay):
130130
sleeped = 0.1
131131
time.sleep(sleeped)
132-
sock4 = socket.socket()
133-
sock6 = socket.socket(family=socket.AF_INET6)
134132
sleep_step = 0.2
135-
try:
136-
while sock4.connect_ex(('127.0.0.1', port)) and sock6.connect_ex(('::1', port)):
133+
while True:
134+
# Create sockets every iteration because refused sockets cannot be
135+
# reused on some systems.
136+
sock4 = socket.socket()
137+
sock6 = socket.socket(family=socket.AF_INET6)
138+
try:
139+
if sock4.connect_ex(('127.0.0.1', port)) == 0 \
140+
or sock6.connect_ex(('::1', port)) == 0:
141+
return True
137142
if proc.poll() is not None:
138143
logger.warn('server process is exited')
139144
return False
@@ -142,11 +147,11 @@ def ensure_socket_open(proc, port, max_delay):
142147
return False
143148
time.sleep(sleep_step)
144149
sleeped += sleep_step
145-
logger.debug('waited %f sec for server port open' % sleeped)
146-
return True
147-
finally:
148-
sock4.close()
149-
sock6.close()
150+
finally:
151+
sock4.close()
152+
sock6.close()
153+
logger.debug('waited %f sec for server port open' % sleeped)
154+
return True
150155

151156
try:
152157
max_bind_retry = 3

test/py/RunClientServer.py

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -133,20 +133,26 @@ def ensureServerAlive():
133133
% (server_class, ' '.join(server_args)))
134134

135135
# Wait for the server to start accepting connections on the given port.
136-
sock = socket.socket()
137136
sleep_time = 0.1 # Seconds
138137
max_attempts = 100
139-
try:
140-
attempt = 0
141-
while sock.connect_ex(('127.0.0.1', port)) != 0:
138+
# try:
139+
attempt = 0
140+
while True:
141+
sock4 = socket.socket()
142+
sock6 = socket.socket(socket.AF_INET6)
143+
try:
144+
if sock4.connect_ex(('127.0.0.1', port)) == 0 \
145+
or sock6.connect_ex(('::1', port)) == 0:
146+
break
142147
attempt += 1
143148
if attempt >= max_attempts:
144149
raise Exception("TestServer not ready on port %d after %.2f seconds"
145150
% (port, sleep_time * attempt))
146151
ensureServerAlive()
147152
time.sleep(sleep_time)
148-
finally:
149-
sock.close()
153+
finally:
154+
sock4.close()
155+
sock6.close()
150156

151157
try:
152158
if verbose > 0:

0 commit comments

Comments
 (0)