bpo-33540: Add block_on_close attr to socketserver (GH-6911)

Add a new block_on_close class attribute to ForkingMixIn and
ThreadingMixIn classes of socketserver to opt-in for pre-3.7 behaviour.
diff --git a/Lib/socketserver.py b/Lib/socketserver.py
index 1ae7bef..71bb9a4 100644
--- a/Lib/socketserver.py
+++ b/Lib/socketserver.py
@@ -543,6 +543,8 @@
         timeout = 300
         active_children = None
         max_children = 40
+        # If true, server_close() waits until all child processes complete.
+        block_on_close = True
 
         def collect_children(self, *, blocking=False):
             """Internal routine to wait for children that have exited."""
@@ -620,7 +622,7 @@
 
         def server_close(self):
             super().server_close()
-            self.collect_children(blocking=True)
+            self.collect_children(blocking=self.block_on_close)
 
 
 class ThreadingMixIn:
@@ -629,6 +631,8 @@
     # Decides how threads will act upon termination of the
     # main process
     daemon_threads = False
+    # If true, server_close() waits until all non-daemonic threads terminate.
+    block_on_close = True
     # For non-daemonic threads, list of threading.Threading objects
     # used by server_close() to wait for all threads completion.
     _threads = None
@@ -659,11 +663,12 @@
 
     def server_close(self):
         super().server_close()
-        threads = self._threads
-        self._threads = None
-        if threads:
-            for thread in threads:
-                thread.join()
+        if self.block_on_close:
+            threads = self._threads
+            self._threads = None
+            if threads:
+                for thread in threads:
+                    thread.join()
 
 
 if hasattr(os, "fork"):