Mercurial > hg > nginx
diff src/os/unix/ngx_recv.c @ 6506:dc1ae0056a1e
Fixed small inconsistency in handling EOF among receive functions.
Now all functions always drop the ready flag in this case.
author | Valentin Bartenev <vbart@nginx.com> |
---|---|
date | Fri, 08 Apr 2016 16:39:49 +0300 |
parents | f01ab2dbcfdc |
children | 8ee94ecd3a50 |
line wrap: on
line diff
--- a/src/os/unix/ngx_recv.c +++ b/src/os/unix/ngx_recv.c @@ -54,7 +54,24 @@ ngx_unix_recv(ngx_connection_t *c, u_cha ngx_log_debug3(NGX_LOG_DEBUG_EVENT, c->log, 0, "recv: fd:%d %z of %uz", c->fd, n, size); - if (n >= 0) { + if (n == 0) { + rev->ready = 0; + rev->eof = 1; + + /* + * on FreeBSD recv() may return 0 on closed socket + * even if kqueue reported about available data + */ + + if (ngx_event_flags & NGX_USE_KQUEUE_EVENT) { + rev->available = 0; + } + + return 0; + } + + if (n > 0) { + if (ngx_event_flags & NGX_USE_KQUEUE_EVENT) { rev->available -= n; @@ -73,18 +90,6 @@ ngx_unix_recv(ngx_connection_t *c, u_cha } } - if (n == 0) { - - /* - * on FreeBSD recv() may return 0 on closed socket - * even if kqueue reported about available data - */ - - rev->ready = 0; - rev->eof = 1; - rev->available = 0; - } - return n; } @@ -94,10 +99,6 @@ ngx_unix_recv(ngx_connection_t *c, u_cha rev->ready = 0; } - if (n == 0) { - rev->eof = 1; - } - return n; }