From e21720da69f2a505bcd1405cc7e8b52d5649df55 Mon Sep 17 00:00:00 2001 From: Thijs Schreijer Date: Sat, 29 Aug 2026 19:59:33 +0200 Subject: fix(receive): a receive 0 should immediately return, not block The fix is slightly more complex because reading from a closed socket should still return a closed-error. fixes: #427 fixes: https://github.com/ledgetech/lua-resty-http/pull/313 --- src/usocket.c | 2 ++ 1 file changed, 2 insertions(+) (limited to 'src/usocket.c') diff --git a/src/usocket.c b/src/usocket.c index 7965db6..e00c43d 100644 --- a/src/usocket.c +++ b/src/usocket.c @@ -258,6 +258,7 @@ int socket_recv(p_socket ps, char *data, size_t count, size_t *got, p_timeout tm int err; *got = 0; if (*ps == SOCKET_INVALID) return IO_CLOSED; + if (count == 0) return IO_DONE; for ( ;; ) { long taken = (long) recv(*ps, data, count, 0); if (taken > 0) { @@ -343,6 +344,7 @@ int socket_read(p_socket ps, char *data, size_t count, size_t *got, p_timeout tm int err; *got = 0; if (*ps == SOCKET_INVALID) return IO_CLOSED; + if (count == 0) return IO_DONE; for ( ;; ) { long taken = (long) read(*ps, data, count); if (taken > 0) { -- cgit v1.2.3-55-g6feb