diff options
Diffstat (limited to 'src/os/unix')
-rw-r--r-- | src/os/unix/ngx_freebsd_sendfile_chain.c | 2 | ||||
-rw-r--r-- | src/os/unix/ngx_readv_chain.c | 19 | ||||
-rw-r--r-- | src/os/unix/ngx_recv.c | 12 | ||||
-rw-r--r-- | src/os/unix/ngx_send.c | 6 | ||||
-rw-r--r-- | src/os/unix/ngx_solaris_config.h | 2 | ||||
-rw-r--r-- | src/os/unix/ngx_writev_chain.c | 6 |
6 files changed, 32 insertions, 15 deletions
diff --git a/src/os/unix/ngx_freebsd_sendfile_chain.c b/src/os/unix/ngx_freebsd_sendfile_chain.c index 721335ed2..662b3347b 100644 --- a/src/os/unix/ngx_freebsd_sendfile_chain.c +++ b/src/os/unix/ngx_freebsd_sendfile_chain.c @@ -58,7 +58,7 @@ ngx_freebsd_sendfile_chain(ngx_connection_t *c, ngx_chain_t *in, off_t limit) if ((ngx_event_flags & NGX_USE_KQUEUE_EVENT) && wev->pending_eof - /* FreeBSD 6.0 may erroneously report ETIMEDOUT */ + /* FreeBSD 5.x-6.x may erroneously report ETIMEDOUT */ && wev->kq_errno != NGX_ETIMEDOUT) { (void) ngx_connection_error(c, wev->kq_errno, diff --git a/src/os/unix/ngx_readv_chain.c b/src/os/unix/ngx_readv_chain.c index 9de4cd5ec..0e99cb413 100644 --- a/src/os/unix/ngx_readv_chain.c +++ b/src/os/unix/ngx_readv_chain.c @@ -32,23 +32,26 @@ ngx_readv_chain(ngx_connection_t *c, ngx_chain_t *chain) 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; - ngx_log_error(NGX_LOG_INFO, c->log, rev->kq_errno, - "kevent() reported about an closed connection"); - if (rev->kq_errno) { rev->error = 1; ngx_set_socket_errno(rev->kq_errno); - return NGX_ERROR; + + return ngx_connection_error(c, rev->kq_errno, + "kevent() reported about an closed connection"); } return 0; - - } else { - return NGX_AGAIN; } } } 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; } } } diff --git a/src/os/unix/ngx_send.c b/src/os/unix/ngx_send.c index 167f2eca3..0c3f959da 100644 --- a/src/os/unix/ngx_send.c +++ b/src/os/unix/ngx_send.c @@ -19,7 +19,11 @@ ssize_t ngx_unix_send(ngx_connection_t *c, u_char *buf, size_t size) #if (NGX_HAVE_KQUEUE) - if ((ngx_event_flags & NGX_USE_KQUEUE_EVENT) && wev->pending_eof) { + if ((ngx_event_flags & NGX_USE_KQUEUE_EVENT) + && wev->pending_eof + /* FreeBSD 5.x-6.x may erroneously report ETIMEDOUT */ + && wev->kq_errno != NGX_ETIMEDOUT) + { (void) ngx_connection_error(c, wev->kq_errno, "kevent() reported about an closed connection"); wev->error = 1; diff --git a/src/os/unix/ngx_solaris_config.h b/src/os/unix/ngx_solaris_config.h index 84a4c8476..a668b95e1 100644 --- a/src/os/unix/ngx_solaris_config.h +++ b/src/os/unix/ngx_solaris_config.h @@ -48,6 +48,8 @@ #include <inttypes.h> #include <crypt.h> +#define NGX_ALIGNMENT _MAX_ALIGNMENT + #include <ngx_auto_config.h> diff --git a/src/os/unix/ngx_writev_chain.c b/src/os/unix/ngx_writev_chain.c index f95c2cad8..09e08e108 100644 --- a/src/os/unix/ngx_writev_chain.c +++ b/src/os/unix/ngx_writev_chain.c @@ -33,7 +33,11 @@ ngx_writev_chain(ngx_connection_t *c, ngx_chain_t *in, off_t limit) #if (NGX_HAVE_KQUEUE) - if ((ngx_event_flags & NGX_USE_KQUEUE_EVENT) && wev->pending_eof) { + if ((ngx_event_flags & NGX_USE_KQUEUE_EVENT) + && wev->pending_eof + /* FreeBSD 5.x-6.x may erroneously report ETIMEDOUT */ + && wev->kq_errno != NGX_ETIMEDOUT) + { (void) ngx_connection_error(c, wev->kq_errno, "kevent() reported about an closed connection"); wev->error = 1; |