Perfectly disconnects from ThreadingTCPServer

I created a simple test application (Python 2.6.1) that runs ThreadingTCPServer, based on an example here . If the client sends a "bye" command, I want to close the server and exit the application. The output part is working fine, but when I try to restart the application, I get:

socket.error: [Errno 48] Address already in use

I tried the solution given here to configure the socket options, but that didn't seem to help. I tried various ways to close the server, but always get the same error.

Any idea what I'm doing wrong?

import SocketServer
import socket
import sys
import threading
import time

class RequestHandler(SocketServer.BaseRequestHandler):

    def setup(self):
        print("Connection received from %s" % str(self.client_address))
        self.request.send("Welcome!\n")

    def handle(self):
        while 1:
            data = self.request.recv(1024)
            if (data.strip() == 'bye'):
                 print("Leaving server.")
                 self.finish()
                 self.server.shutdown()
                 # None of these things seem to work either
                 #time.sleep(2)
                 #del self.server.socket
                 #self.server.socket.shutdown(socket.SHUT_WR)
                 #self.server.socket.close()
                 #self.server.server_close()
                 break


    def finish(self):
        self.request.send("Goodbye!  Please come back soon.")

if __name__ == "__main__":
       server = SocketServer.ThreadingTCPServer(("localhost", 9999), RequestHandler)
       # This doesn't seem to help.
       #server.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1)
       #server.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
       server.serve_forever()
       print("Exiting program.")
+3
source share
1 answer

, , ...

, ?

, , , , .

+1

All Articles