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) {