diff src/event/ngx_event_accept.c @ 103:6dfda4cf5200

nginx-0.0.1-2003-06-11-19:28:34 import
author Igor Sysoev <igor@sysoev.ru>
date Wed, 11 Jun 2003 15:28:34 +0000
parents 7ebc8b7fb816
children b5be4b0448d3
line wrap: on
line diff
--- a/src/event/ngx_event_accept.c
+++ b/src/event/ngx_event_accept.c
@@ -30,21 +30,23 @@ void ngx_event_accept(ngx_event_t *ev)
 
         /*
          * Create the pool before accept() to avoid copy the sockaddr.
-         * Although accept() can fail it's uncommon case
+         * Although accept() can fail it's an uncommon case
          * and the pool can be got from the free pool list
          */
 
-        pool = ngx_create_pool(ls->pool_size, ev->log);
+        pool = ngx_create_pool(ls->listening->pool_size, ev->log);
         if (pool == NULL) {
             return;
         }
 
-        sa = ngx_palloc(pool, ls->socklen);
+        sa = ngx_palloc(pool, ls->listening->socklen);
         if (sa == NULL) {
             return;
         }
 
-        len = ls->socklen;
+        len = ls->listening->socklen;
+
+ngx_log_debug(ev->log, "ADDR %s" _ ls->listening->addr_text.data);
 
         s = accept(ls->fd, sa, &len);
         if (s == -1) {
@@ -52,12 +54,13 @@ void ngx_event_accept(ngx_event_t *ev)
 
             if (err == NGX_EAGAIN) {
                 ngx_log_error(NGX_LOG_NOTICE, ev->log, err,
-                              "EAGAIN while accept() %s", ls->addr_text.data);
+                              "EAGAIN while accept() %s",
+                              ls->listening->addr_text.data);
                 return;
             }
 
             ngx_log_error(NGX_LOG_ALERT, ev->log, err,
-                          "accept() %s failed", ls->addr_text.data);
+                          "accept() %s failed", ls->listening->addr_text.data);
 
             ngx_destroy_pool(pool);
             return;
@@ -70,12 +73,12 @@ void ngx_event_accept(ngx_event_t *ev)
                           "accept() %s returned socket #%d while "
                           "only %d connections was configured, "
                           "sleeping for 1 second",
-                          ls->addr_text.data, s, ecf->connections);
+                          ls->listening->addr_text.data, s, ecf->connections);
 
             if (ngx_close_socket(s) == -1) {
                 ngx_log_error(NGX_LOG_ALERT, ev->log, ngx_socket_errno,
                               ngx_close_socket_n " %s failed",
-                              ls->addr_text.data);
+                              ls->listening->addr_text.data);
             }
 
             ngx_msleep(1000);
@@ -91,12 +94,12 @@ void ngx_event_accept(ngx_event_t *ev)
                 if (ngx_blocking(s) == -1) {
                     ngx_log_error(NGX_LOG_ALERT, ev->log, ngx_socket_errno,
                                   ngx_blocking_n " %s failed",
-                                  ls->addr_text.data);
+                                  ls->listening->addr_text.data);
 
                     if (ngx_close_socket(s) == -1) {
                         ngx_log_error(NGX_LOG_ALERT, ev->log, ngx_socket_errno,
                                       ngx_close_socket_n " %s failed",
-                                      ls->addr_text.data);
+                                      ls->listening->addr_text.data);
                     }
 
                     ngx_destroy_pool(pool);
@@ -109,12 +112,12 @@ void ngx_event_accept(ngx_event_t *ev)
                 if (ngx_nonblocking(s) == -1) {
                     ngx_log_error(NGX_LOG_ALERT, ev->log, ngx_socket_errno,
                                   ngx_nonblocking_n " %s failed",
-                                  ls->addr_text.data);
+                                  ls->listening->addr_text.data);
 
                     if (ngx_close_socket(s) == -1) {
                         ngx_log_error(NGX_LOG_ALERT, ev->log, ngx_socket_errno,
                                       ngx_close_socket_n " %s failed",
-                                      ls->addr_text.data);
+                                      ls->listening->addr_text.data);
                     }
 
                     ngx_destroy_pool(pool);
@@ -123,9 +126,26 @@ void ngx_event_accept(ngx_event_t *ev)
             }
         }
 
+#if (WIN32)
+        /*
+         * Winsock assignes a socket number divisible by 4
+         * so to find a connection we divide a socket number by 4.
+         */
+
+        if (s % 4) {
+            ngx_log_error(NGX_LOG_EMERG, ls->log, 0,
+                          ngx_socket_n " created socket %d", s);
+            exit(1);
+        }
+
+        rev = &ngx_read_events[s / 4];
+        wev = &ngx_write_events[s / 4];
+        c = &ngx_connections[s / 4];
+#else
         rev = &ngx_read_events[s];
         wev = &ngx_write_events[s];
         c = &ngx_connections[s];
+#endif
 
         instance = rev->instance;
 
@@ -135,12 +155,9 @@ void ngx_event_accept(ngx_event_t *ev)
 
         c->pool = pool;
 
+        c->listening = ls->listening;
         c->sockaddr = sa;
-        c->family = ls->family;
         c->socklen = len;
-        c->addr = ls->addr;
-        c->addr_text_max_len = ls->addr_text_max_len;
-        c->post_accept_timeout = ls->post_accept_timeout;
 
         rev->instance = wev->instance = !instance;
 
@@ -182,7 +199,7 @@ void ngx_event_accept(ngx_event_t *ev)
                 if (ngx_close_socket(s) == -1) {
                     ngx_log_error(NGX_LOG_ALERT, ev->log, ngx_socket_errno,
                                   ngx_close_socket_n " %s failed",
-                                  ls->addr_text.data);
+                                  ls->listening->addr_text.data);
                 }
 
                 ngx_destroy_pool(pool);
@@ -190,7 +207,7 @@ void ngx_event_accept(ngx_event_t *ev)
             }
         }
 
-        ls->handler(c);
+        ls->listening->handler(c);
 
         if (ngx_event_flags & NGX_HAVE_KQUEUE_EVENT) {
             ev->available--;