diff options
| author | Thijs Schreijer <thijs@thijsschreijer.nl> | 2026-08-29 19:59:33 +0200 |
|---|---|---|
| committer | Thijs Schreijer <thijs@thijsschreijer.nl> | 2026-08-30 08:46:47 +0200 |
| commit | e21720da69f2a505bcd1405cc7e8b52d5649df55 (patch) | |
| tree | b37bd8a78ba484dd9987b306a50d391315f639ab /src/wsocket.c | |
| parent | 827ae20771d34912a8f79b50dc68e6430945b9eb (diff) | |
| download | luasocket-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.c | 1 |
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) { |
