Win32: event flags handling edge cases in ngx_wsarecv().

Fixed event flags handling edge cases in ngx_wsarecv() and ngx_wsarecv_chain(),
notably to always reset rev->ready in case of errors (which wasn't the case
after ngx_socket_nread() errors), and after EOF (rev->ready was not cleared
if due to a misconfiguration a zero-sized buffer was used for reading).
This commit is contained in:
Maxim Dounin 2022-12-01 04:22:36 +03:00
parent 5cd89e4788
commit 7fd888bb22
2 changed files with 4 additions and 0 deletions

View File

@ -78,6 +78,7 @@ ngx_wsarecv(ngx_connection_t *c, u_char *buf, size_t size)
ngx_socket_nread_n " failed");
if (n == NGX_ERROR) {
rev->ready = 0;
rev->error = 1;
}
@ -95,6 +96,7 @@ ngx_wsarecv(ngx_connection_t *c, u_char *buf, size_t size)
}
if (bytes == 0) {
rev->ready = 0;
rev->eof = 1;
}

View File

@ -121,6 +121,7 @@ ngx_wsarecv_chain(ngx_connection_t *c, ngx_chain_t *chain, off_t limit)
} else if (bytes == size) {
if (ngx_socket_nread(c->fd, &rev->available) == -1) {
rev->ready = 0;
rev->error = 1;
ngx_connection_error(c, ngx_socket_errno,
ngx_socket_nread_n " failed");
@ -138,6 +139,7 @@ ngx_wsarecv_chain(ngx_connection_t *c, ngx_chain_t *chain, off_t limit)
}
if (bytes == 0) {
rev->ready = 0;
rev->eof = 1;
}