fix SDLUDPHole
This commit is contained in:
parent
c3752bb688
commit
358e555666
@ -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 {
|
||||
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)
|
||||
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)
|
||||
}
|
||||
}
|
||||
}
|
||||
} while true
|
||||
SDLLogger.log("[SDLContext] readTask finish")
|
||||
} catch let err {
|
||||
SDLLogger.log("[SDLContext] readTask catch error: \(err)")
|
||||
throw err
|
||||
}
|
||||
} while true
|
||||
} onCancel: {
|
||||
SDLLogger.log("[SDLContext] readTask onCancel")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user