Стоп UDP SocketServer - PullRequest
       6

Стоп UDP SocketServer

2 голосов
/ 03 февраля 2012

Я создаю UDP SocketServer, и я хотел бы завершить работу, если я получаю сообщение о закрытии со стороны клиента, чем я хочу закрыть соединение UDP.

Когда я получил сообщениеBegin будет отображаться, но Finished не отображается.Как я могу выйти из этой темы?

class MyUDPHandler( SocketServer.BaseRequestHandler ):       
    def handle( self ):
        data = self.request[0].strip()        
        dic = self.string_XML_to_dic( data )
        if( dic['Cmd'] == str(UDPConst().SHUT_DOWN )): 
            print('Begin')           
            self.server.shutdown()
            print("Finished")

if __name__ == "__main__": 
    HOST, PORT = "", prop['udpport']
    server = SocketServer.UDPServer( ( HOST, PORT ), MyUDPHandler )    
    server.serve_forever()

1 Ответ

0 голосов
/ 03 февраля 2012

Поскольку вы не запускаете сервер в своем собственном потоке (для этого вам нужно унаследовать ThreadingMixIn), вы не можете использовать shutdown, так как это приведет к тупику. Из комментария к документу функции в источнике :

Блокирует до завершения цикла. Это должно быть вызвано serve_forever () выполняется в другом потоке или тупиковые.

...