fix SDLUDPHole

This commit is contained in:
anlicheng 2026-05-06 22:24:56 +08:00
parent c3752bb688
commit 358e555666

View File

@ -111,7 +111,7 @@ actor SDLContextActor {
private var ipv6AssistClient: SDLIPV6AssistClient?
//
private var readTask: Task<(), Never>?
private var readTask: Task<Void, Error>?
private let sessionManager = SessionManager()
nonisolated private let arpServer: ArpServer
@ -212,6 +212,7 @@ actor SDLContextActor {
self.superMonitorTask = nil
await superClient?.stop()
SDLLogger.log("[SDLContext] try to cancel readTask")
self.readTask?.cancel()
self.readTask = nil
@ -937,26 +938,30 @@ extension SDLContextActor {
// , 线packetFlow
private func startReader() {
//
self.readTask?.cancel()
//
let provider = self.provider
self.readTask = Task(priority: .high) {
repeat {
self.readTask = Task(priority: .high) { [weak self] in
try await withTaskCancellationHandler {
do {
repeat {
try Task.checkCancellation()
let (packets, numbers) = await provider.packetFlow.readPackets()
try Task.checkCancellation()
for (data, number) in zip(packets, numbers) where number == 2 {
if let ipPacket = IPPacket(data) {
await self.dealTunPacket(packet: ipPacket)
await self?.dealTunPacket(packet: ipPacket)
}
}
} catch let err {
SDLLogger.log("[SDLContext] readTask catch error: \(err)")
}
} while true
SDLLogger.log("[SDLContext] readTask finish")
} catch let err {
SDLLogger.log("[SDLContext] readTask catch error: \(err)")
throw err
}
} onCancel: {
SDLLogger.log("[SDLContext] readTask onCancel")
}
}
}