fix(core): 修复内核级禁用 IPv6 时 Python Webhook 假死的问题,引入智能 IPv4 降级回退机制 (Resolves #23)

This commit is contained in:
hotyue
2026-04-20 17:41:17 +00:00
parent 3b28ead0e4
commit c04a4c41e4

View File

@@ -394,14 +394,20 @@ class AgentHandler(http.server.BaseHTTPRequestHandler):
import socket import socket
# ================== [v3.0.3 变更: 引入多线程模型抵抗 Slowloris 攻击] ================== # ================== [v3.0.3 变更: 引入多线程模型抵抗 Slowloris 攻击] ==================
class ThreadedDualStackServer(socketserver.ThreadingMixIn, socketserver.TCPServer): class ThreadedServer(socketserver.ThreadingMixIn, socketserver.TCPServer):
allow_reuse_address = True # 开启端口复用,防止热重启时端口冲突 allow_reuse_address = True # 开启端口复用,防止热重启时端口冲突
address_family = socket.AF_INET6 if socket.has_ipv6 else socket.AF_INET
try: try:
bind_addr = "::" if socket.has_ipv6 else "" # 1. 优先尝试监听双栈/IPv6 (大多数 Linux 默认支持 IPv4 映射接入)
with ThreadedDualStackServer((bind_addr, PORT), AgentHandler) as httpd: ThreadedServer.address_family = socket.AF_INET6
httpd.serve_forever() httpd = ThreadedServer(("::", PORT), AgentHandler)
except Exception:
# 2. [核心修复 Issue #23] 若系统内核已禁用 IPv6抛弃报错智能回退至纯 IPv4 监听
ThreadedServer.address_family = socket.AF_INET
httpd = ThreadedServer(("0.0.0.0", PORT), AgentHandler)
try:
httpd.serve_forever()
except Exception as e: except Exception as e:
sys.exit(1) sys.exit(1)
# ==================================================================================== # ====================================================================================