fix dnsLocalClient

This commit is contained in:
anlicheng 2026-05-04 22:17:22 +08:00
parent 2505945825
commit 09af580892

View File

@ -16,6 +16,12 @@ import NIOCore
enum SDLContextError: Error { enum SDLContextError: Error {
case udpHoleClosed case udpHoleClosed
case dnsLocalClientClosed
case dnsLocalClientCancelled
case dnsClientClosed
case dnsClientCancelled
} }
actor SDLContextActor { actor SDLContextActor {
@ -310,11 +316,6 @@ actor SDLContextActor {
SDLLogger.log("[SDLContext] dnsClient started") SDLLogger.log("[SDLContext] dnsClient started")
self.dnsClient = dnsClient self.dnsClient = dnsClient
defer {
self.dnsClient?.stop()
self.dnsClient = nil
}
try await withThrowingTaskGroup { group in try await withThrowingTaskGroup { group in
defer { defer {
group.cancelAll() group.cancelAll()
@ -327,6 +328,7 @@ actor SDLContextActor {
let nePacket = NEPacket(data: packet, protocolFamily: 2) let nePacket = NEPacket(data: packet, protocolFamily: 2)
self.provider.packetFlow.writePacketObjects([nePacket]) self.provider.packetFlow.writePacketObjects([nePacket])
} }
throw SDLContextError.dnsClientClosed
} }
group.addTask { group.addTask {
@ -338,7 +340,7 @@ actor SDLContextActor {
throw error throw error
case .cancelled: case .cancelled:
SDLLogger.log("[SDLContext] dnsClient cancelled") SDLLogger.log("[SDLContext] dnsClient cancelled")
return throw SDLContextError.dnsClientCancelled
case .sendFailed(let error): case .sendFailed(let error):
SDLLogger.log("[SDLContext] dnsClient sendFailed with error: \(error)") SDLLogger.log("[SDLContext] dnsClient sendFailed with error: \(error)")
throw error throw error
@ -346,7 +348,15 @@ actor SDLContextActor {
} }
} }
try await group.next() do {
try await group.next()
dnsClient.stop()
self.dnsClient = nil
} catch let err {
dnsClient.stop()
self.dnsClient = nil
throw err
}
} }
} }
@ -373,6 +383,7 @@ actor SDLContextActor {
let nePacket = NEPacket(data: packet, protocolFamily: 2) let nePacket = NEPacket(data: packet, protocolFamily: 2)
self.provider.packetFlow.writePacketObjects([nePacket]) self.provider.packetFlow.writePacketObjects([nePacket])
} }
throw SDLContextError.dnsLocalClientClosed
} }
group.addTask { group.addTask {
@ -385,7 +396,7 @@ actor SDLContextActor {
throw error throw error
case .cancelled: case .cancelled:
SDLLogger.log("[SDLContext] dnsLocalClient cancelled") SDLLogger.log("[SDLContext] dnsLocalClient cancelled")
return throw SDLContextError.dnsLocalClientCancelled
case .sendFailed(let error): case .sendFailed(let error):
SDLLogger.log("[SDLContext] dnsLocalClient sendFailed: \(error)") SDLLogger.log("[SDLContext] dnsLocalClient sendFailed: \(error)")
throw error throw error
@ -395,10 +406,10 @@ actor SDLContextActor {
do { do {
try await group.next() try await group.next()
await self.dnsLocalClient?.stop() await dnsLocalClient.stop()
self.dnsLocalClient = nil self.dnsLocalClient = nil
} catch let err { } catch let err {
await self.dnsLocalClient?.stop() await dnsLocalClient.stop()
self.dnsLocalClient = nil self.dnsLocalClient = nil
throw err throw err
} }