Add a close_request method to the BaseServer so that the TCPServer class
can close the request connection when it's done handling it.
diff --git a/Lib/SocketServer.py b/Lib/SocketServer.py
index ec0159a..e5863b5 100644
--- a/Lib/SocketServer.py
+++ b/Lib/SocketServer.py
@@ -154,6 +154,7 @@
     - verify_request(request, client_address)
     - server_close()
     - process_request(request, client_address)
+    - close_request(request)
     - handle_error()
 
     Methods for derived classes:
@@ -214,6 +215,7 @@
                 self.process_request(request, client_address)
             except:
                 self.handle_error(request, client_address)
+        self.close_request(request)
 
     def verify_request(self, request, client_address):
         """Verify the request.  May be overridden.
@@ -243,6 +245,10 @@
         """Finish one request by instantiating RequestHandlerClass."""
         self.RequestHandlerClass(request, client_address, self)
 
+    def close_request(self, request):
+        """Called to clean up an individual request."""
+        pass
+
     def handle_error(self, request, client_address):
         """Handle an error gracefully.  May be overridden.
 
@@ -277,6 +283,7 @@
     - get_request() -> request, client_address
     - verify_request(request, client_address)
     - process_request(request, client_address)
+    - close_request(request)
     - handle_error()
 
     Methods for derived classes:
@@ -357,6 +364,10 @@
         """
         return self.socket.accept()
 
+    def close_request(self, request):
+        """Called to clean up an individual request."""
+        request.close()
+
 
 class UDPServer(TCPServer):
 
@@ -376,6 +387,9 @@
         # No need to call listen() for UDP.
         pass
 
+    def close_request(self, request):
+        # No need to close anything.
+        pass
 
 class ForkingMixIn: