mirror of
https://github.com/vacp2p/nim-libp2p.git
synced 2026-01-09 14:28:11 -05:00
chore(quic): readOnce better exception handling (#1610)
This commit is contained in:
@@ -56,18 +56,23 @@ template mapExceptions(body: untyped) =
|
||||
method readOnce*(
|
||||
stream: QuicStream, pbytes: pointer, nbytes: int
|
||||
): Future[int] {.async: (raises: [CancelledError, LPStreamError]).} =
|
||||
try:
|
||||
if stream.cached.len == 0:
|
||||
if stream.cached.len == 0:
|
||||
try:
|
||||
stream.cached = await stream.stream.read()
|
||||
if stream.cached.len == 0:
|
||||
raise newLPStreamEOFError()
|
||||
except CancelledError as exc:
|
||||
raise exc
|
||||
except LPStreamEOFError as exc:
|
||||
raise exc
|
||||
except CatchableError as exc:
|
||||
raise (ref LPStreamError)(msg: "error in readOnce: " & exc.msg, parent: exc)
|
||||
|
||||
result = min(nbytes, stream.cached.len)
|
||||
copyMem(pbytes, addr stream.cached[0], result)
|
||||
stream.cached = stream.cached[result ..^ 1]
|
||||
libp2p_network_bytes.inc(result.int64, labelValues = ["in"])
|
||||
except CatchableError as exc:
|
||||
raise newLPStreamEOFError()
|
||||
let toRead = min(nbytes, stream.cached.len)
|
||||
copyMem(pbytes, addr stream.cached[0], toRead)
|
||||
stream.cached = stream.cached[toRead ..^ 1]
|
||||
libp2p_network_bytes.inc(toRead.int64, labelValues = ["in"])
|
||||
return toRead
|
||||
|
||||
{.push warning[LockLevel]: off.}
|
||||
method write*(
|
||||
|
||||
Reference in New Issue
Block a user