Skip to content

Commit ef2de0d

Browse files
committed
Fix: ensure full packet reception
1 parent 9f49168 commit ef2de0d

File tree

1 file changed

+11
-2
lines changed

1 file changed

+11
-2
lines changed

nmqtt.nim

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -423,9 +423,18 @@ proc recv(ctx: MqttCtx): Future[Pkt] {.async.} =
423423

424424
if len > 0:
425425
pkt.data.setlen len
426-
r = await ctx.s.recvInto(pkt.data[0].addr, len)
427426

428-
if r != len:
427+
var offset = 0
428+
while offset < len:
429+
try:
430+
r = await ctx.s.recvInto(addr pkt.data[offset], len - offset)
431+
except:
432+
break
433+
if r == 0:
434+
break
435+
offset += r
436+
437+
if offset != len:
429438
when not defined(broker):
430439
await ctx.close("remote closed connection")
431440
return

0 commit comments

Comments
 (0)