mirror of https://github.com/python/cpython
Issue #10816: multiprocessing.SocketClient() closes the socket on error
Use a context manager to close immediatly the socket on error.
This commit is contained in:
parent
90efac7f37
commit
2b69506c79
|
@ -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
|
||||
|
||||
#
|
||||
|
|
Loading…
Reference in New Issue