comparison src/os/win32/ngx_wsarecv_chain.c @ 8111:56819a9491fe

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).
author Maxim Dounin <mdounin@mdounin.ru>
date Thu, 01 Dec 2022 04:22:36 +0300
parents ecf2a9002b37
children
comparison
equal deleted inserted replaced
8110:06c7d84cafdb 8111:56819a9491fe
119 "WSARecv: avail:%d", rev->available); 119 "WSARecv: avail:%d", rev->available);
120 120
121 } else if (bytes == size) { 121 } else if (bytes == size) {
122 122
123 if (ngx_socket_nread(c->fd, &rev->available) == -1) { 123 if (ngx_socket_nread(c->fd, &rev->available) == -1) {
124 rev->ready = 0;
124 rev->error = 1; 125 rev->error = 1;
125 ngx_connection_error(c, ngx_socket_errno, 126 ngx_connection_error(c, ngx_socket_errno,
126 ngx_socket_nread_n " failed"); 127 ngx_socket_nread_n " failed");
127 return NGX_ERROR; 128 return NGX_ERROR;
128 } 129 }
136 if (bytes < size) { 137 if (bytes < size) {
137 rev->ready = 0; 138 rev->ready = 0;
138 } 139 }
139 140
140 if (bytes == 0) { 141 if (bytes == 0) {
142 rev->ready = 0;
141 rev->eof = 1; 143 rev->eof = 1;
142 } 144 }
143 145
144 return bytes; 146 return bytes;
145 } 147 }