Mercurial > hg > nginx
comparison src/os/win32/ngx_wsarecv.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 | efd71d49bde0 |
children |
comparison
equal
deleted
inserted
replaced
8110:06c7d84cafdb | 8111:56819a9491fe |
---|---|
76 if (ngx_socket_nread(c->fd, &rev->available) == -1) { | 76 if (ngx_socket_nread(c->fd, &rev->available) == -1) { |
77 n = ngx_connection_error(c, ngx_socket_errno, | 77 n = ngx_connection_error(c, ngx_socket_errno, |
78 ngx_socket_nread_n " failed"); | 78 ngx_socket_nread_n " failed"); |
79 | 79 |
80 if (n == NGX_ERROR) { | 80 if (n == NGX_ERROR) { |
81 rev->ready = 0; | |
81 rev->error = 1; | 82 rev->error = 1; |
82 } | 83 } |
83 | 84 |
84 return n; | 85 return n; |
85 } | 86 } |
93 if (bytes < size) { | 94 if (bytes < size) { |
94 rev->ready = 0; | 95 rev->ready = 0; |
95 } | 96 } |
96 | 97 |
97 if (bytes == 0) { | 98 if (bytes == 0) { |
99 rev->ready = 0; | |
98 rev->eof = 1; | 100 rev->eof = 1; |
99 } | 101 } |
100 | 102 |
101 return bytes; | 103 return bytes; |
102 } | 104 } |