Skip to content

Commit 2b69506

Browse files
author
Victor Stinner
committed
Issue #10816: multiprocessing.SocketClient() closes the socket on error
Use a context manager to close immediatly the socket on error.
1 parent 90efac7 commit 2b69506

1 file changed

Lines changed: 14 additions & 15 deletions

File tree

Lib/multiprocessing/connection.py

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -281,25 +281,24 @@ def SocketClient(address):
281281
Return a connection object connected to the socket given by `address`
282282
'''
283283
family = address_type(address)
284-
s = socket.socket( getattr(socket, family) )
285-
t = _init_timeout()
284+
with socket.socket( getattr(socket, family) ) as s:
285+
t = _init_timeout()
286286

287-
while 1:
288-
try:
289-
s.connect(address)
290-
except socket.error as e:
291-
if e.args[0] != errno.ECONNREFUSED or _check_timeout(t):
292-
debug('failed to connect to address %s', address)
293-
raise
294-
time.sleep(0.01)
287+
while 1:
288+
try:
289+
s.connect(address)
290+
except socket.error as e:
291+
if e.args[0] != errno.ECONNREFUSED or _check_timeout(t):
292+
debug('failed to connect to address %s', address)
293+
raise
294+
time.sleep(0.01)
295+
else:
296+
break
295297
else:
296-
break
297-
else:
298-
raise
298+
raise
299299

300-
fd = duplicate(s.fileno())
300+
fd = duplicate(s.fileno())
301301
conn = _multiprocessing.Connection(fd)
302-
s.close()
303302
return conn
304303

305304
#

0 commit comments

Comments
 (0)