]> git.kaiwu.me - nginx.git/commitdiff
nginx-0.0.1-2003-10-27-19:16:17 import
authorIgor Sysoev <igor@sysoev.ru>
Mon, 27 Oct 2003 16:16:17 +0000 (16:16 +0000)
committerIgor Sysoev <igor@sysoev.ru>
Mon, 27 Oct 2003 16:16:17 +0000 (16:16 +0000)
src/event/modules/ngx_kqueue_module.c
src/event/ngx_event_connect.c
src/http/modules/proxy/ngx_http_proxy_handler.c
src/http/ngx_http_request.c
src/http/ngx_http_special_response.c

index 14eb27038d6db302af32b761087e13a7389d8e26..2c743fcfb1447a425ca9c6839840948f7c5e0bb5 100644 (file)
@@ -201,7 +201,7 @@ static int ngx_kqueue_add_event(ngx_event_t *ev, int event, u_int flags)
     {
         c = ev->data;
         ngx_log_error(NGX_LOG_ALERT, ev->log, 0,
-                      "previous event were not passed in kernel", c->fd);
+                      "previous event on #%d were not passed in kernel", c->fd);
 
         return NGX_ERROR;
     }
index c76ade1c8fc150b0523bdae700b9cf5a594be155..32609f18d892cec370665f12839f8df5cdc331a8 100644 (file)
@@ -38,8 +38,6 @@ int ngx_event_connect_peer(ngx_peer_connection_t *pc)
     pc->cached = 0;
     pc->connection = NULL;
 
-    peer = &pc->peers->peers[0];
-
     if (pc->peers->number > 1) {
 
         /* there are several peers */
@@ -85,6 +83,8 @@ int ngx_event_connect_peer(ngx_peer_connection_t *pc)
         }
     }
 
+    peer = &pc->peers->peers[pc->cur_peer];
+
     /* ngx_unlock_mutex(pc->peers->mutex); */
 
 #if 0
@@ -182,6 +182,8 @@ int ngx_event_connect_peer(ngx_peer_connection_t *pc)
     addr.sin_addr.s_addr = peer->addr;
     addr.sin_port = peer->port;
 
+ngx_log_debug(pc->log, "CONNECT: %s" _ peer->addr_port_text.data);
+
     rc = connect(s, (struct sockaddr *) &addr, sizeof(struct sockaddr_in));
 
     if (rc == -1) {
@@ -232,6 +234,12 @@ int ngx_event_connect_peer(ngx_peer_connection_t *pc)
 
 void ngx_event_connect_peer_failed(ngx_peer_connection_t *pc)
 {
+    pc->cur_peer++;
+
+    if (pc->cur_peer >= pc->peers->number) {
+        pc->cur_peer = 0;
+    }
+
     pc->tries--;
 
     return;
index ae6d5d148f47f6f4cdc3dbc6069e70c4649766a3..0bb3cce40351c11f4d63b1de860b89e0d672d9cc 100644 (file)
@@ -457,6 +457,7 @@ static void ngx_http_proxy_send_request(ngx_http_proxy_ctx_t *p)
                 return;
             }
 
+            ngx_event_connect_peer_failed(&p->upstream);
             ngx_http_proxy_close_connection(c);
         }
 
index 9b8ac27865d1a0785500a2a3a6c6f110cb17cd45..e3a4952344f6c608bc4d8936135f66bd36232115 100644 (file)
@@ -629,7 +629,7 @@ static void ngx_http_process_request_headers(ngx_event_t *rev)
                 return;
             }
 
-            if (r->header_timeout_set) {
+            if (rev->timer_set) {
                 ngx_del_timer(rev);
             }
 
index ce6183e8b15547ca89c4d6c180bc9868b7755b0b..035d4878f7b869a765224f84cac8e1b8e8970b51 100644 (file)
@@ -157,6 +157,12 @@ int ngx_http_special_response_handler(ngx_http_request_t *r, int error)
     ngx_chain_t               *out, **ll, *cl;
     ngx_http_core_loc_conf_t  *clcf;
 
+    rc = ngx_http_discard_body(r);
+
+    if (rc != NGX_OK) {
+        return rc;
+    }
+
     r->headers_out.status = error;
 
     if (error < NGX_HTTP_BAD_REQUEST) {