美文网首页
socketserver服务停止后端口不能立即释放,占用直至tc

socketserver服务停止后端口不能立即释放,占用直至tc

作者: cooooper | 来源:发表于2018-11-29 11:34 被阅读0次

    创建 socketserver TCP 服务器,监听某端口接收客户端数据
    程序断开后(如重启服务、kill或者ctrl+c),不能立即释放端口,需等待每个线程tcp连接都断开后才能重启服务

    解决方法是重写 socketserver.ThreadingTCPServer
    把变量 allow_reuse_address 设置为 True

    class MyThreadingTCPServer(socketserver.ThreadingTCPServer):
        """重写socketserver.ThreadingTCPServer"""
        # 服务停止后即刻释放端口,无需等待tcp连接断开
        allow_reuse_address = True
    

    启动服务时

    """其中MyTCPHandler继承自socketserver.BaseRequestHandler
    重写了其handle方法
    """
    server = MyThreadingTCPServer((HOST, PORT), MyTCPHandler)   #线程
    server.serve_forever()
    

    • ps:
      如果使用 socket,可用 setsockopt 设置 SO_REUSEADDR 值为1
    socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
    

    相关文章

      网友评论

          本文标题:socketserver服务停止后端口不能立即释放,占用直至tc

          本文链接:https://www.haomeiwen.com/subject/gxvxcqtx.html