From 3283c2ae61935935525ef63dfd31b991f30c5a36 Mon Sep 17 00:00:00 2001 From: anlicheng <244108715@qq.com> Date: Wed, 4 Feb 2026 14:01:42 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A4=84=E7=90=86udp=E5=90=AF=E5=8A=A8?= =?UTF-8?q?=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Tun/Punchnet/SDLContextActor.swift | 32 +++++++++++------------------- 1 file changed, 12 insertions(+), 20 deletions(-) diff --git a/Tun/Punchnet/SDLContextActor.swift b/Tun/Punchnet/SDLContextActor.swift index 6234900..53fda12 100644 --- a/Tun/Punchnet/SDLContextActor.swift +++ b/Tun/Punchnet/SDLContextActor.swift @@ -172,10 +172,8 @@ actor SDLContextActor { // 获取当前udp启动的地址 let localAddress = udpHole.getLocalAddress() - self.udpHole = udpHole - + // 阻塞等待udpHole是准备好的状态 await udpHole.channelIsActived() - await self.handleUDPHoleReady() // 处理心跳逻辑 let pingTask = Task.detached { @@ -229,8 +227,19 @@ actor SDLContextActor { } } + self.udpHole = udpHole self.udpHoleWorkers = [pingTask, dataTask, signalTask] + // 开始探测nat的类型 + Task { + let natType = await self.proberActor.probeNatType(using: udpHole) + self.setNatType(natType: natType) + SDLLogger.shared.log("[SDLContext] nat_type is: \(natType)") + } + + // 注册 + self.doRegisterSuper() + return udpHole } @@ -256,23 +265,6 @@ actor SDLContextActor { self.natType = natType } - // 处理和super的协商问题 - private func handleUDPHoleReady() { - guard let udpHole = self.udpHole else { - return - } - - // 开始探测nat的类型 - Task { - let natType = await self.proberActor.probeNatType(using: udpHole) - self.setNatType(natType: natType) - SDLLogger.shared.log("[SDLContext] nat_type is: \(natType)") - } - - // 注册 - self.doRegisterSuper() - } - private func sendStunRequest() { guard let sessionToken = self.sessionToken else { return