From cac931020c5a8bc6431f798a21e536cd6aa929f6 Mon Sep 17 00:00:00 2001 From: anlicheng <244108715@qq.com> Date: Tue, 14 Apr 2026 16:08:28 +0800 Subject: [PATCH] fix --- Tun/Punchnet/Actors/SDLContextActor.swift | 30 +++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/Tun/Punchnet/Actors/SDLContextActor.swift b/Tun/Punchnet/Actors/SDLContextActor.swift index 320d1e0..07e869f 100644 --- a/Tun/Punchnet/Actors/SDLContextActor.swift +++ b/Tun/Punchnet/Actors/SDLContextActor.swift @@ -48,6 +48,8 @@ actor SDLContextActor { // 依赖的变量 private var udpHole: SDLUDPHole? private var udpHoleWorkers: [Task]? + private var udpHoleV6: SDLUDPHoleV6? + private var udpHoleV6Workers: [Task]? // dns的client对象 private var dnsClient: DNSCloudClient? @@ -147,6 +149,13 @@ actor SDLContextActor { try await udpHole.waitClose() SDLLogger.log("[SDLContext] udp closed!!!!") } + + await self.supervisor.addWorker(name: "udpHoleV6") { + let udpHoleV6 = try await self.startUDPHoleV6() + SDLLogger.log("[SDLContext] udpV6 running!!!!") + try await udpHoleV6.waitClose() + SDLLogger.log("[SDLContext] udpV6 closed!!!!") + } } public func waitForReady() async throws { @@ -363,6 +372,21 @@ actor SDLContextActor { return udpHole } + private func startUDPHoleV6() async throws -> SDLUDPHoleV6 { + self.udpHoleV6Workers?.forEach {$0.cancel()} + self.udpHoleV6Workers = nil + + // 启动udp ipv6服务器 + let udpHoleV6 = try SDLUDPHoleV6() + let localAddress = try udpHoleV6.start() + SDLLogger.log("[SDLContext] udpHoleV6 started, on address: \(localAddress)") + + self.udpHoleV6 = udpHoleV6 + self.udpHoleV6Workers = [] + + return udpHoleV6 + } + // 处理context的停止问题 public func stop() async { self.resumeReadyWaiters(.failure(CancellationError())) @@ -377,6 +401,11 @@ actor SDLContextActor { self.udpHole?.stop() self.udpHole = nil + self.udpHoleV6Workers?.forEach { $0.cancel() } + self.udpHoleV6Workers = nil + self.udpHoleV6?.stop() + self.udpHoleV6 = nil + self.quicWorker?.cancel() self.quicWorker = nil self.quicClient?.stop() @@ -1007,6 +1036,7 @@ actor SDLContextActor { deinit { self.udpHole = nil + self.udpHoleV6 = nil self.dnsClient = nil } }