From b48cfa679e9ed38973980a35a188117165e7c0c9 Mon Sep 17 00:00:00 2001 From: Jesse Noller Date: Mon, 30 Mar 2009 16:19:10 +0000 Subject: Merge 70717 to 26maint --- Lib/multiprocessing/connection.py | 1 + Lib/test/test_multiprocessing.py | 24 ++++++++++++++++++++++++ Misc/NEWS | 7 +++++++ 3 files changed, 32 insertions(+) diff --git a/Lib/multiprocessing/connection.py b/Lib/multiprocessing/connection.py index 1f05658..59beaa0 100644 --- a/Lib/multiprocessing/connection.py +++ b/Lib/multiprocessing/connection.py @@ -214,6 +214,7 @@ class SocketListener(object): ''' def __init__(self, address, family, backlog=1): self._socket = socket.socket(getattr(socket, family)) + self._socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) self._socket.bind(address) self._socket.listen(backlog) self._address = self._socket.getsockname() diff --git a/Lib/test/test_multiprocessing.py b/Lib/test/test_multiprocessing.py index d4ce4fa..aa4743f 100644 --- a/Lib/test/test_multiprocessing.py +++ b/Lib/test/test_multiprocessing.py @@ -1188,6 +1188,30 @@ class _TestRemoteManager(BaseTestCase): del queue manager.shutdown() +class _TestManagerRestart(BaseTestCase): + + def _putter(self, address, authkey): + manager = QueueManager( + address=address, authkey=authkey, serializer=SERIALIZER) + manager.connect() + queue = manager.get_queue() + queue.put('hello world') + + def test_rapid_restart(self): + authkey = os.urandom(32) + manager = QueueManager( + address=('localhost', 9999), authkey=authkey, serializer=SERIALIZER) + manager.start() + + p = self.Process(target=self._putter, args=(manager.address, authkey)) + p.start() + queue = manager.get_queue() + self.assertEqual(queue.get(), 'hello world') + manager.shutdown() + manager = QueueManager( + address=('localhost', 9999), authkey=authkey, serializer=SERIALIZER) + manager.start() + # # # diff --git a/Misc/NEWS b/Misc/NEWS index aca1cc5..f882ed9 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -92,6 +92,13 @@ Core and Builtins Library ------- +- Issue #5177: Multiprocessing's SocketListener class now uses + socket.SO_REUSEADDR on all connections so that the user no longer needs + to wait 120 seconds for the socket to expire. + +- Adjusted _tkinter to compile without warnings when WITH_THREAD is not + defined (part of issue #5035). + - Issue #5561: Removed the sys.version_info shortcuts from platform's python_version() and python_version_tuple() since they produced different output compared to previous Python versions. -- cgit v0.12