Commit 2b69506c authored by Victor Stinner's avatar Victor Stinner

Issue #10816: multiprocessing.SocketClient() closes the socket on error

Use a context manager to close immediatly the socket on error.
parent 90efac7f
......@@ -281,25 +281,24 @@ def SocketClient(address):
Return a connection object connected to the socket given by `address`
'''
family = address_type(address)
s = socket.socket( getattr(socket, family) )
t = _init_timeout()
with socket.socket( getattr(socket, family) ) as s:
t = _init_timeout()
while 1:
try:
s.connect(address)
except socket.error as e:
if e.args[0] != errno.ECONNREFUSED or _check_timeout(t):
debug('failed to connect to address %s', address)
raise
time.sleep(0.01)
while 1:
try:
s.connect(address)
except socket.error as e:
if e.args[0] != errno.ECONNREFUSED or _check_timeout(t):
debug('failed to connect to address %s', address)
raise
time.sleep(0.01)
else:
break
else:
break
else:
raise
raise
fd = duplicate(s.fileno())
fd = duplicate(s.fileno())
conn = _multiprocessing.Connection(fd)
s.close()
return conn
#
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment