aboutsummaryrefslogtreecommitdiff
path: root/src/wsocket.c
diff options
context:
space:
mode:
authorThijs Schreijer <thijs@thijsschreijer.nl>2026-08-29 19:59:33 +0200
committerThijs Schreijer <thijs@thijsschreijer.nl>2026-08-30 08:46:47 +0200
commite21720da69f2a505bcd1405cc7e8b52d5649df55 (patch)
treeb37bd8a78ba484dd9987b306a50d391315f639ab /src/wsocket.c
parent827ae20771d34912a8f79b50dc68e6430945b9eb (diff)
downloadluasocket-e21720da69f2a505bcd1405cc7e8b52d5649df55.tar.gz
luasocket-e21720da69f2a505bcd1405cc7e8b52d5649df55.tar.bz2
luasocket-e21720da69f2a505bcd1405cc7e8b52d5649df55.zip
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
Diffstat (limited to 'src/wsocket.c')
-rw-r--r--src/wsocket.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/src/wsocket.c b/src/wsocket.c
index d3af9d4..86c6994 100644
--- a/src/wsocket.c
+++ b/src/wsocket.c
@@ -247,6 +247,7 @@ int socket_recv(p_socket ps, char *data, size_t count, size_t *got,
247 int err, prev = IO_DONE; 247 int err, prev = IO_DONE;
248 *got = 0; 248 *got = 0;
249 if (*ps == SOCKET_INVALID) return IO_CLOSED; 249 if (*ps == SOCKET_INVALID) return IO_CLOSED;
250 if (count == 0) return IO_DONE;
250 for ( ;; ) { 251 for ( ;; ) {
251 int taken = recv(*ps, data, (int) count, 0); 252 int taken = recv(*ps, data, (int) count, 0);
252 if (taken > 0) { 253 if (taken > 0) {