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): ...@@ -281,25 +281,24 @@ def SocketClient(address):
Return a connection object connected to the socket given by `address` Return a connection object connected to the socket given by `address`
''' '''
family = address_type(address) family = address_type(address)
s = socket.socket( getattr(socket, family) ) with socket.socket( getattr(socket, family) ) as s:
t = _init_timeout() t = _init_timeout()
while 1: while 1:
try: try:
s.connect(address) s.connect(address)
except socket.error as e: except socket.error as e:
if e.args[0] != errno.ECONNREFUSED or _check_timeout(t): if e.args[0] != errno.ECONNREFUSED or _check_timeout(t):
debug('failed to connect to address %s', address) debug('failed to connect to address %s', address)
raise raise
time.sleep(0.01) time.sleep(0.01)
else:
break
else: else:
break raise
else:
raise
fd = duplicate(s.fileno()) fd = duplicate(s.fileno())
conn = _multiprocessing.Connection(fd) conn = _multiprocessing.Connection(fd)
s.close()
return conn 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