Upstream: better detection of connect() failures with kqueue.

Pending EOF might be reported on both read and write events, whichever
comes first, so check both of them.

Patch by Yichun Zhang (agentzh), slightly modified.
This commit is contained in:
Maxim Dounin 2012-11-16 18:29:19 +00:00
parent 4d0d2b20ac
commit e1d5455a74

View File

@ -1809,9 +1809,16 @@ ngx_http_upstream_test_connect(ngx_connection_t *c)
#if (NGX_HAVE_KQUEUE)
if (ngx_event_flags & NGX_USE_KQUEUE_EVENT) {
if (c->write->pending_eof) {
if (c->write->pending_eof || c->read->pending_eof) {
if (c->write->pending_eof) {
err = c->write->kq_errno;
} else {
err = c->read->kq_errno;
}
c->log->action = "connecting to upstream";
(void) ngx_connection_error(c, c->write->kq_errno,
(void) ngx_connection_error(c, err,
"kevent() reported that connect() failed");
return NGX_ERROR;
}