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