diff src/http/modules/proxy/ngx_http_proxy_handler.c @ 313:98f1a8028067

nginx-0.0.3-2004-04-13-19:08:48 import
author Igor Sysoev <igor@sysoev.ru>
date Tue, 13 Apr 2004 15:08:48 +0000
parents f5431a4bbc7d
children 39b6f2df45c0
line wrap: on
line diff
--- a/src/http/modules/proxy/ngx_http_proxy_handler.c
+++ b/src/http/modules/proxy/ngx_http_proxy_handler.c
@@ -425,7 +425,9 @@ void ngx_http_proxy_check_broken_connect
 
     n = recv(c->fd, buf, 1, MSG_PEEK);
 
-    if (ev->write && n >= 0) {
+    err = ngx_socket_errno;
+
+    if (ev->write && (n >= 0 || err == NGX_EAGAIN)) {
         return;
     }
 
@@ -443,7 +445,6 @@ void ngx_http_proxy_check_broken_connect
     ev->eof = 1;
 
     if (n == -1) {
-        err = ngx_socket_errno;
         if (err == NGX_EAGAIN) {
             return;
         }
@@ -634,11 +635,11 @@ void ngx_http_proxy_close_connection(ngx
         ngx_del_conn(c, NGX_CLOSE_EVENT);
 
     } else {
-        if (c->read->active) {
+        if (c->read->active || c->read->posted) {
             ngx_del_event(c->read, NGX_READ_EVENT, NGX_CLOSE_EVENT);
         }
 
-        if (c->write->active) {
+        if (c->write->active || c->read->posted) {
             ngx_del_event(c->write, NGX_WRITE_EVENT, NGX_CLOSE_EVENT);
         }
     }