]> granicus.if.org Git - python/commitdiff
Issue #23254: Document how to close the TCPServer listening socket.
authorRobert Collins <rbtcollins@hp.com>
Wed, 29 Jul 2015 00:52:40 +0000 (12:52 +1200)
committerRobert Collins <rbtcollins@hp.com>
Wed, 29 Jul 2015 00:52:40 +0000 (12:52 +1200)
Patch from Martin Panter.

Doc/library/socketserver.rst
Lib/test/test_socketserver.py
Misc/NEWS

index 1ec44389bf8c2484cadac85f28de6ebae868fc4d..3e49af6bba424b7584dd901804d637a7773ce78f 100644 (file)
@@ -33,9 +33,10 @@ Creating a server requires several steps.  First, you must create a request
 handler class by subclassing the :class:`BaseRequestHandler` class and
 overriding its :meth:`handle` method; this method will process incoming
 requests.  Second, you must instantiate one of the server classes, passing it
-the server's address and the request handler class.  Finally, call the
+the server's address and the request handler class.  Then call the
 :meth:`handle_request` or :meth:`serve_forever` method of the server object to
-process one or many requests.
+process one or many requests.  Finally, call :meth:`~BaseServer.server_close`
+to close the socket.
 
 When inheriting from :class:`ThreadingMixIn` for threaded connection behavior,
 you should explicitly declare how you want your threads to behave on an abrupt
@@ -177,6 +178,13 @@ Server Objects
    Tell the :meth:`serve_forever` loop to stop and wait until it does.
 
 
+.. method:: BaseServer.server_close()
+
+   Clean up the server. May be overridden.
+
+   .. versionadded:: 2.6
+
+
 .. attribute:: BaseServer.address_family
 
    The family of protocols to which the server's socket belongs.
@@ -547,6 +555,7 @@ An example for the :class:`ThreadingMixIn` class::
        client(ip, port, "Hello World 3")
 
        server.shutdown()
+       server.server_close()
 
 
 The output of the example should look something like this::
index 924b9c4d2296e4f1afe6d6425481ef6ea5f14fd7..325d4856f9297567b8397aba18acaf04fe200887 100644 (file)
@@ -144,6 +144,7 @@ class SocketServerTest(unittest.TestCase):
         server.shutdown()
         t.join()
         server.server_close()
+        self.assertEqual(-1, server.socket.fileno())
         if verbose: print("done")
 
     def stream_examine(self, proto, addr):
index 4cf7d6d0ec953982692756eb13255ce2878e49b5..83f310bb008c90477fd508d3db0c2dd012114415 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -66,6 +66,9 @@ Core and Builtins
 Library
 -------
 
+- Issue #23254: Document how to close the TCPServer listening socket.
+  Patch from Martin Panter.
+
 - Issue #19450: Update Windows builds to use SQLite 3.8.11.0
 
 - Issue #23441: rcompleter now prints a tab character instead of displaying