From 968b86755b0af830b4fbb2770d7d289c6898653d Mon Sep 17 00:00:00 2001 From: anlicheng <244108715@qq.com> Date: Tue, 5 May 2026 12:54:24 +0800 Subject: [PATCH] fix dnsClient --- Tun/Punchnet/Actors/SDLContextActor.swift | 8 ++++---- Tun/Punchnet/DNS/DNSLocalClient.swift | 9 ++------- 2 files changed, 6 insertions(+), 11 deletions(-) diff --git a/Tun/Punchnet/Actors/SDLContextActor.swift b/Tun/Punchnet/Actors/SDLContextActor.swift index e1dc13a..30c1a56 100644 --- a/Tun/Punchnet/Actors/SDLContextActor.swift +++ b/Tun/Punchnet/Actors/SDLContextActor.swift @@ -327,7 +327,6 @@ actor SDLContextActor { let nePacket = NEPacket(data: packet, protocolFamily: 2) self.provider.packetFlow.writePacketObjects([nePacket]) } - throw SDLContextError.dnsClientClosed } onCancel: { dnsClient.stop() } @@ -342,8 +341,10 @@ actor SDLContextActor { self.dnsLocalClient = dnsLocalClient defer { - self.dnsLocalClient = nil - //dnsLocalClient.stop() + Task { + self.dnsLocalClient = nil + await dnsLocalClient.stop() + } } try await withTaskCancellationHandler { @@ -354,7 +355,6 @@ actor SDLContextActor { let nePacket = NEPacket(data: packet, protocolFamily: 2) self.provider.packetFlow.writePacketObjects([nePacket]) } - throw SDLContextError.dnsLocalClientClosed } onCancel: { Task { await dnsLocalClient.stop() diff --git a/Tun/Punchnet/DNS/DNSLocalClient.swift b/Tun/Punchnet/DNS/DNSLocalClient.swift index f1b8984..d603153 100644 --- a/Tun/Punchnet/DNS/DNSLocalClient.swift +++ b/Tun/Punchnet/DNS/DNSLocalClient.swift @@ -37,7 +37,6 @@ actor DNSLocalClient { private let timeoutInterval: TimeInterval = 3.0 nonisolated let packetFlow: AsyncThrowingStream - @ObservationIgnored private let packetContinuation: AsyncThrowingStream.Continuation private var isPacketContinuationFinished: Bool = false @@ -87,10 +86,6 @@ actor DNSLocalClient { } func query(tracker: DNSTracker, dnsPayload: Data) { - let transactionID: UInt16 - let connection: NWConnection - let rewrittenPayload: Data - guard self.state != .stopped, let connection = self.connection, connection.state == .ready, dnsPayload.count >= 2 else { return @@ -101,9 +96,9 @@ actor DNSLocalClient { return } - transactionID = allocatedTransactionID + let transactionID = allocatedTransactionID self.pendingRequests[transactionID] = PendingRequest(tracker: tracker) - rewrittenPayload = Self.rewriteTransactionID(in: dnsPayload, to: transactionID) + let rewrittenPayload = Self.rewriteTransactionID(in: dnsPayload, to: transactionID) connection.send(content: rewrittenPayload, completion: .contentProcessed { [weak self] error in if let error {