socketserver服務停止后端口不能立即釋放,占用直至tcp連接斷開

創(chuàng)建 socketserver TCP 服務器,監(jiān)聽某端口接收客戶端數據
程序斷開后(如重啟服務、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)
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容