Hi all,

My problem in summary is that my use of the shutdown() method only shuts down a server after the next TCP request is received.

I have a TCP server created in the run() method of a thread.

    class TCPlistener( Thread ):
        def run( self ):
           with socketserver.TCPServer(  ("localhost", 9999), ConnHandler ) as server:
                self.server = server
                print( "TCP listener on: %s:%d" % ( self.host, self.port ) )
                self.server.serve_forever()

                print( "TCPlistener:run() ending" )

ConnHandler is a simple echo class with only a handle() method

The main bit of the program is

    if __name__ == "__main__":
        serverThrd = TCPlistener()
        serverThrd.start()            #start TCP IP server listening
        print("server started")

        ch = getche()                    #wait for key press
        print()
        serverThrd.server.shutdown()

        print( "main ending" )

Everying works as expected, numerous connections can be made and the received text is echoed back.

The issue is that if I press a key on the keyboard the key is immediately shown on the screen but then the shutdown() call blocks until another TCP connection is made, text is echoed back and only then does serve_forever()return followed by shutdown()returning as can be seen from the console session,

>>python36 TCPIPserver.py
server started
TCP listener on: localhost:9999
q #pressed 'q' key
127.0.0.1 wrote: #Sent some text from PuTTY
b'SOME TEXT'
TCPlistener:run() ending
main ending

How can I get shutdown()to shut down the server immediately without waiting for the next TCP connection?

Regards,

JOhn

--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to