New submission from Michael Ballantyne: from multiprocessing/connection.py: while 1: try: s.connect(address) except socket.error, 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: raise
According to the POSIX spec http://pubs.opengroup.org/onlinepubs/9699919799/ "If connect() fails, the state of the socket is unspecified. Conforming applications should close the file descriptor and create a new socket before attempting to reconnect." On Mac OS X and other BSDs (but not Linux), attempting to connect() again throws EINVAL. As a result, the multiprocessing.connection.Client does not successfully retry, and instead throws socket.error: [Errno 22] Invalid argument after the first refused connection. I found that error message pretty confusing, and didn't realize that it effectively meant the connection was refused. The change for issue #13215 removes the retry behavior entirely, so this bug does not appear in 3.3 and up. ---------- assignee: ronaldoussoren components: Library (Lib), Macintosh messages: 193069 nosy: Michael.Ballantyne, ronaldoussoren priority: normal severity: normal status: open title: Multiprocessing connection SocketClient retries connection on socket type: behavior versions: Python 2.6, Python 2.7, Python 3.1, Python 3.2 _______________________________________ Python tracker <rep...@bugs.python.org> <http://bugs.python.org/issue18455> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com