nginx-0.0.1-2003-05-29-17:02:09 import
diff --git a/src/event/ngx_event.c b/src/event/ngx_event.c
index 2361a3f..be9af20 100644
--- a/src/event/ngx_event.c
+++ b/src/event/ngx_event.c
@@ -9,7 +9,7 @@
 #define DEF_CONNECTIONS  1024
 
 
-extern ngx_event_module_t ngx_select_module_ctx;
+extern ngx_module_t ngx_select_module;
 
 #if (HAVE_KQUEUE)
 #include <ngx_kqueue_module.h>
@@ -122,12 +122,11 @@
 
 int ngx_pre_thread(ngx_array_t *ls, ngx_pool_t *pool, ngx_log_t *log)
 {
-    int  m, i, fd;
-
-    ngx_listen_t      *s;
-    ngx_event_t       *ev;
-    ngx_connection_t  *c;
-    ngx_event_conf_t  *ecf;
+    int                  m, i, fd;
+    ngx_listen_t        *s;
+    ngx_event_t         *ev;
+    ngx_connection_t    *c;
+    ngx_event_conf_t    *ecf;
     ngx_event_module_t  *module;
 
     ecf = ngx_event_get_conf(ngx_event_module);
diff --git a/src/event/ngx_event.h b/src/event/ngx_event.h
index 3e27ab0..928d2cf 100644
--- a/src/event/ngx_event.h
+++ b/src/event/ngx_event.h
@@ -90,9 +90,7 @@
     unsigned         ignore_econnreset:1;
     unsigned         unexpected_eof:1;
 
-#if (HAVE_DEFERRED_ACCEPT)
     unsigned         deferred_accept:1;
-#endif
 
 #if (HAVE_KQUEUE)
     unsigned         eof:1;
@@ -277,6 +275,7 @@
 #define ngx_process_events   ngx_event_actions.process
 #define ngx_add_event        ngx_event_actions.add
 #define ngx_del_event        ngx_event_actions.del
+#define ngx_add_conn         ngx_event_actions.add_conn
 #define ngx_del_conn         ngx_event_actions.del_conn
 
 #if 0
diff --git a/src/event/ngx_event_accept.c b/src/event/ngx_event_accept.c
index c69427f..4bf1043 100644
--- a/src/event/ngx_event_accept.c
+++ b/src/event/ngx_event_accept.c
@@ -1,11 +1,9 @@
 
-#include <nginx.h>
-
 #include <ngx_config.h>
 #include <ngx_core.h>
-#include <ngx_types.h>
-#include <ngx_log.h>
-#include <ngx_connection.h>
+
+#include <nginx.h>
+
 #include <ngx_event.h>
 
 
@@ -19,18 +17,17 @@
     ngx_socket_t       s;
     ngx_event_t       *rev, *wev;
     ngx_connection_t  *c, *ls;
+    ngx_event_conf_t  *ecf;
 
-    ls = (ngx_connection_t *) ev->data;
+    ecf = ngx_event_get_conf(ngx_event_module);
+
+    ls = ev->data;
 
     ngx_log_debug(ev->log, "ngx_event_accept: accept ready: %d" _
                   ev->available);
 
     ev->ready = 0;
 
-#if 0
-/* DEBUG */ ev->available++;
-#endif
-
     do {
 
         /* Create the pool before accept() to avoid copy the sockaddr.
@@ -52,16 +49,37 @@
         s = accept(ls->fd, sa, &len);
         if (s == -1) {
             err = ngx_socket_errno;
-            ngx_destroy_pool(pool);
 
             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->addr_text.data);
                 return;
             }
 
             ngx_log_error(NGX_LOG_ALERT, ev->log, err,
-                          "accept %s failed", ls->addr_text.data);
+                          "accept() %s failed", ls->addr_text.data);
+
+            ngx_destroy_pool(pool);
+            return;
+        }
+
+        if (s >= ecf->connections) {
+
+            ngx_log_error(NGX_LOG_ALERT, ev->log, 0,
+                          "accept() %s returned socket #%d while "
+                          "only %d connections was configured, "
+                          "sleeping for 1 second",
+                          ls->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);
+            }
+
+            sleep(1);
+
+            ngx_destroy_pool(pool);
             return;
         }
 
@@ -73,6 +91,14 @@
                     ngx_log_error(NGX_LOG_ALERT, ev->log, ngx_socket_errno,
                                   ngx_blocking_n " %s failed",
                                   ls->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);
+                    }
+
+                    ngx_destroy_pool(pool);
                     return;
                 }
             }
@@ -83,6 +109,14 @@
                     ngx_log_error(NGX_LOG_ALERT, ev->log, ngx_socket_errno,
                                   ngx_nonblocking_n " %s failed",
                                   ls->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);
+                    }
+
+                    ngx_destroy_pool(pool);
                     return;
                 }
             }
@@ -133,28 +167,28 @@
         ngx_memcpy(c->log, ev->log, sizeof(ngx_log_t));
         rev->log = wev->log = c->log;
 
-        /* STUB: x86: SP: xadd ?, MT: lock xadd, MP: lock xadd, shared */
+        /* STUB: x86: 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);
+        ngx_log_debug(ev->log, "accept: %d, %d" _ s _ c->number);
 
-#if (HAVE_DEFERRED_ACCEPT)
-        if (ev->accept_filter) {
+        if (ev->deferred_accept) {
             rev->ready = 1;
         }
-#endif
 
-#if (HAVE_EDGE_EVENT) /* epoll */
+        if (ngx_add_conn) {
+            if (ngx_add_conn(c) == NGX_ERROR) {
+                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);
+                }
 
-        if (ngx_event_flags & NGX_HAVE_EDGE_EVENT) {
-            if (ngx_edge_add_event(ev) == NGX_ERROR) {
+                ngx_destroy_pool(pool);
                 return;
             }
         }
 
-#endif
-
         ls->handler(c);
 
         if (ngx_event_flags & NGX_HAVE_KQUEUE_EVENT) {