diff src/event/ngx_event_accept.c @ 26:53cb81681040

nginx-0.0.1-2002-12-15-09:25:09 import
author Igor Sysoev <igor@sysoev.ru>
date Sun, 15 Dec 2002 06:25:09 +0000
parents 77c7629a2627
children a8d5abe713e6
line wrap: on
line diff
--- a/src/event/ngx_event_accept.c
+++ b/src/event/ngx_event_accept.c
@@ -1,3 +1,5 @@
+
+#include <nginx.h>
 
 #include <ngx_config.h>
 #include <ngx_core.h>
@@ -11,11 +13,12 @@
 
 int ngx_event_accept(ngx_event_t *ev)
 {
-    ngx_err_t           err;
-    ngx_socket_t        s;
-    struct sockaddr_in  addr;
-    int addrlen = sizeof(struct sockaddr_in);
-    ngx_connection_t *cn = (ngx_connection_t *) ev->data;
+    ngx_err_t          err;
+    ngx_socket_t       s;
+    ngx_event_t       *rev, *wev;
+    ngx_connection_t  *c, *ac;
+
+    ac = (ngx_connection_t *) ev->data;
             
     ngx_log_debug(ev->log, "ngx_event_accept: accept ready: %d" _
                   ev->available);
@@ -23,69 +26,73 @@ int ngx_event_accept(ngx_event_t *ev)
     ev->ready = 0;
   
     do {
-        if ((s = accept(cn->fd, cn->sockaddr, &cn->socklen)) == -1) {
+        if ((s = accept(ac->fd, ac->sockaddr, &ac->socklen)) == -1) {
             err = ngx_socket_errno;
             if (err == NGX_EAGAIN) {
                 ngx_log_error(NGX_LOG_INFO, ev->log, err,
                              "ngx_event_accept: EAGAIN while accept %s",
-                             cn->addr_text);
+                             ac->addr_text);
                 return NGX_OK;
             }
 
             ngx_log_error(NGX_LOG_ERR, ev->log, err,
-                         "ngx_event_accept: accept %s failed", cn->addr_text);
+                         "ngx_event_accept: accept %s failed", ac->addr_text);
             /* if we return NGX_ERROR listen socket would be closed */
             return NGX_OK;
         }
 
-        ngx_log_debug(ev->log, "ngx_event_accept: accept: %d" _ s);
-
 #if !(HAVE_INHERITED_NONBLOCK)
         if (ngx_nonblocking(s) == -1)
             ngx_log_error(NGX_LOG_ERR, log, ngx_socket_errno,
                           ngx_nonblocking_n "failed");
 #endif
 
-        ngx_memzero(&ngx_read_events[s], sizeof(ngx_event_t));
-        ngx_memzero(&ngx_write_events[s], sizeof(ngx_event_t));
-        ngx_memzero(&ngx_connections[s], sizeof(ngx_connection_t));
+        rev = &ngx_read_events[s];
+        wev = &ngx_write_events[s];
+        c = &ngx_connections[s];
+
+        ngx_memzero(rev, sizeof(ngx_event_t));
+        ngx_memzero(wev, sizeof(ngx_event_t));
+        ngx_memzero(c, sizeof(ngx_connection_t));
 
-        ngx_connections[s].sockaddr = cn->sockaddr;
-        ngx_connections[s].family = cn->family;
-        ngx_connections[s].socklen = cn->socklen;
-        ngx_connections[s].addr = cn->addr;
-        ngx_connections[s].addr_text.len = cn->addr_text.len;
-        ngx_connections[s].post_accept_timeout = cn->post_accept_timeout;
+        c->sockaddr = ac->sockaddr;
+        c->family = ac->family;
+        c->socklen = ac->socklen;
+        c->addr = ac->addr;
+        c->addr_text.len = ac->addr_text.len;
+        c->post_accept_timeout = ac->post_accept_timeout;
 
-        ngx_read_events[s].data = ngx_write_events[s].data
-                                                         = &ngx_connections[s];
-        ngx_connections[s].read = &ngx_read_events[s];
-        ngx_connections[s].write = &ngx_write_events[s];
+        rev->index = wev->index = NGX_INVALID_INDEX;
 
-        ngx_connections[s].fd = s;
-        ngx_connections[s].unexpected_eof = 1;
-        ngx_write_events[s].write = 1;
-        ngx_write_events[s].ready = 1;
+        rev->data = wev->data = c;
+        c->read = rev;
+        c->write = wev;
 
-        ngx_write_events[s].timer = ngx_read_events[s].timer = 10000;
+        c->fd = s;
+        c->unexpected_eof = 1;
+        wev->write = 1;
+        wev->ready = 1;
 
-        ngx_write_events[s].timer_handler =
-            ngx_read_events[s].timer_handler = ngx_event_close_connection;
+        wev->timer = rev->timer = 10000;
+        wev->timer_handler = rev->timer_handler = ngx_event_close_connection;
+        wev->close_handler = rev->close_handler = ngx_event_close_connection;
 
-        ngx_write_events[s].close_handler =
-            ngx_read_events[s].close_handler = ngx_event_close_connection;
+        c->server = ac->server;
+        c->servers = ac->servers;
+        c->log = rev->log = wev->log = ev->log;
 
-        ngx_connections[s].server = cn->server;
-        ngx_connections[s].servers = cn->servers;
-        ngx_connections[s].log =
-            ngx_read_events[s].log = ngx_write_events[s].log = ev->log;
+        /* STUB: x86: SP: xadd, MT: lock xadd, MP: lock xadd, shared */
+        c->number = ngx_connection_counter++;
+
+        ngx_log_debug(ev->log, "ngx_event_accept: accept: %d, %d" _
+                                s _ c->number);
 
 #if (HAVE_DEFERRED_ACCEPT)
         if (ev->accept_filter)
-            ngx_read_events[s].ready = 1;
+            rev->ready = 1;
 #endif
 
-        cn->handler(&ngx_connections[s]);
+        ac->handler(c);
 
 #if (HAVE_KQUEUE)
 #if !(USE_KQUEUE)