From e79c3270eadefb854e5e83b0896e370548afe7e4 Mon Sep 17 00:00:00 2001 From: anlicheng <244108715@qq.com> Date: Wed, 4 Feb 2026 17:25:00 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A7=A3=E5=86=B3=E6=B3=A8=E5=86=8C=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Tun/Punchnet/SDLContextActor.swift | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/Tun/Punchnet/SDLContextActor.swift b/Tun/Punchnet/SDLContextActor.swift index d942033..ade4f52 100644 --- a/Tun/Punchnet/SDLContextActor.swift +++ b/Tun/Punchnet/SDLContextActor.swift @@ -14,8 +14,15 @@ import NIOCore 1. 处理rsa的加解密逻辑 */ actor SDLContextActor { - nonisolated let config: SDLConfiguration + enum State { + case unregistered + case registered + } + + nonisolated let config: SDLConfiguration + private var state: State = .unregistered + // nat的网络类型 var natType: SDLNATProberActor.NatType = .blocked @@ -300,6 +307,7 @@ actor SDLContextActor { do { try await self.setNetworkSettings(networkAddress: self.config.networkAddress, dnsServer: SDLDNSClient.Helper.dnsServer) SDLLogger.shared.log("[SDLContext] setNetworkSettings successed") + self.state = .registered self.startReader() } catch let err { SDLLogger.shared.log("[SDLContext] setTunnelNetworkSettings get error: \(err)", level: .error) @@ -378,6 +386,20 @@ actor SDLContextActor { if let registerSuperData = try? registerSuper.serializedData() { SDLLogger.shared.log("[SDLContext] will send register super") self.udpHole?.send(type: .registerSuper, data: registerSuperData, remoteAddress: self.config.stunSocketAddress) + + // 5秒后检查注册是否完成 + Task { + try await Task.sleep(for: .seconds(5)) + self.checkRegisterState() + } + } + } + + // 检查注册状态 + private func checkRegisterState() { + if self.state == .unregistered { + SDLLogger.shared.log("[SDLContext] register super failed, retry") + self.doRegisterSuper() } }