Mercurial > hg > nginx
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 } |