diff options
Diffstat (limited to 'src/os/unix/ngx_recv.c')
-rw-r--r-- | src/os/unix/ngx_recv.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/src/os/unix/ngx_recv.c b/src/os/unix/ngx_recv.c index e96ca7898..6f01ab3ec 100644 --- a/src/os/unix/ngx_recv.c +++ b/src/os/unix/ngx_recv.c @@ -25,7 +25,14 @@ ssize_t ngx_unix_recv(ngx_connection_t *c, u_char *buf, size_t size) rev->pending_eof, rev->available, rev->kq_errno); if (rev->available == 0) { - if (rev->pending_eof) { + + if (!rev->pending_eof) { + return NGX_AGAIN; + } + + /* FreeBSD 5.x-6.x may erroneously report ETIMEDOUT */ + if (rev->kq_errno != NGX_ETIMEDOUT) { + rev->ready = 0; rev->eof = 1; @@ -38,9 +45,6 @@ ssize_t ngx_unix_recv(ngx_connection_t *c, u_char *buf, size_t size) } return 0; - - } else { - return NGX_AGAIN; } } } |