diff --git a/Tun/Punchnet/Actors/SDLQuicClient.swift b/Tun/Punchnet/Actors/SDLQuicClient.swift index a15641f..44d4672 100644 --- a/Tun/Punchnet/Actors/SDLQuicClient.swift +++ b/Tun/Punchnet/Actors/SDLQuicClient.swift @@ -116,13 +116,18 @@ actor SDLQUICReader { func start() { self.readTask = Task { - var buffer: ByteBuffer = allocator.buffer(capacity: self.maxBufferSize) + var buffer = allocator.buffer(capacity: self.maxBufferSize) + let threshold = self.maxBufferSize / 10 * 6 do { while !Task.isCancelled { let (isComplete, data) = try await self.readOnce() if let data, !data.isEmpty { buffer.writeBytes(data) let frames = try parseFrames(buffer: &buffer) + if buffer.readerIndex > threshold { + buffer.discardReadBytes() + } + for frame in frames { if let message = SDLQUICCodec.decode(frame: frame) { self.messageCont.yield(message) @@ -166,11 +171,7 @@ actor SDLQUICReader { frames.append(buf) } } - - if buffer.readerIndex > maxBufferSize / 10 * 6 { - buffer.discardReadBytes() - } - + return frames }