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:
Victor Stinner 2011-01-03 15:47:59 +00:00
parent 90efac7f37
commit 2b69506c79
1 changed files with 14 additions and 15 deletions

View File

@ -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
#