summaryrefslogtreecommitdiffhomepage
path: root/src/event
diff options
context:
space:
mode:
authorIgor Sysoev <igor@sysoev.ru>2002-08-20 14:48:28 +0000
committerIgor Sysoev <igor@sysoev.ru>2002-08-20 14:48:28 +0000
commit2b54238a5f2edcca568c0676a779ef79ba152c91 (patch)
tree2cb7eb660e691eaab2c4f031adf881b7c88bffc9 /src/event
parente0af1b89dcd100462a3195534b2f78a838ca85b5 (diff)
downloadnginx-2b54238a5f2edcca568c0676a779ef79ba152c91.tar.gz
nginx-2b54238a5f2edcca568c0676a779ef79ba152c91.tar.bz2
nginx-0.0.1-2002-08-20-18:48:28 import
Diffstat (limited to 'src/event')
-rw-r--r--src/event/ngx_event.c22
-rw-r--r--src/event/ngx_event.h9
-rw-r--r--src/event/ngx_event_accept.c8
-rw-r--r--src/event/ngx_event_write.c17
4 files changed, 43 insertions, 13 deletions
diff --git a/src/event/ngx_event.c b/src/event/ngx_event.c
index 14a36fbf5..27f5b5872 100644
--- a/src/event/ngx_event.c
+++ b/src/event/ngx_event.c
@@ -3,6 +3,7 @@
#include <ngx_types.h>
#include <ngx_log.h>
#include <ngx_alloc.h>
+#include <ngx_listen.h>
#include <ngx_connection.h>
#include <ngx_event.h>
#include <ngx_event_accept.h>
@@ -18,7 +19,7 @@ ngx_event_t *ngx_read_events, *ngx_write_events;
#if !(USE_KQUEUE)
-#if 1
+#if 0
ngx_event_type_e ngx_event_type = NGX_SELECT_EVENT;
#else
ngx_event_type_e ngx_event_type = NGX_KQUEUE_EVENT;
@@ -40,9 +41,10 @@ static void (*ngx_event_init[]) (int max_connections, ngx_log_t *log) = {
#endif /* USE_KQUEUE */
-void ngx_worker(ngx_listen_t *sock, int n, ngx_pool_t *pool, ngx_log_t *log)
+void ngx_pre_thread(ngx_array_t *ls, ngx_pool_t *pool, ngx_log_t *log)
{
int i, fd;
+ ngx_listen_t *s;
/* per group */
int max_connections = 512;
@@ -55,18 +57,21 @@ void ngx_worker(ngx_listen_t *sock, int n, ngx_pool_t *pool, ngx_log_t *log)
* max_connections, log);
/* for each listening socket */
- for (i = 0; i < n; i++) {
- fd = sock[i].fd;
+ s = (ngx_listen_t *) ls->elts;
+ for (i = 0; i < ls->nelts; i++) {
+
+ fd = s[i].fd;
ngx_memzero(&ngx_read_events[fd], sizeof(ngx_event_t));
ngx_memzero(&ngx_write_events[fd], sizeof(ngx_event_t));
ngx_memzero(&ngx_connections[fd], sizeof(ngx_connection_t));
ngx_connections[fd].fd = fd;
- ngx_connections[fd].server = sock[i].server;
+ ngx_connections[fd].server = s[i].server;
ngx_connections[fd].read = (void *) &ngx_read_events[fd].data;
+ ngx_connections[fd].handler = s[i].handler;
ngx_read_events[fd].data = &ngx_connections[fd];
- ngx_read_events[fd].log = ngx_connections[fd].log = sock[i].log;
+ ngx_read_events[fd].log = ngx_connections[fd].log = s[i].log;
ngx_read_events[fd].data = &ngx_connections[fd];
ngx_read_events[fd].event_handler = &ngx_event_accept;
ngx_read_events[fd].listening = 1;
@@ -74,11 +79,14 @@ void ngx_worker(ngx_listen_t *sock, int n, ngx_pool_t *pool, ngx_log_t *log)
ngx_read_events[fd].available = 0;
#if (HAVE_DEFERRED_ACCEPT)
- ngx_read_events[fd].accept_filter = sock->accept_filter;
+ ngx_read_events[fd].accept_filter = s[i].accept_filter;
#endif
ngx_add_event(&ngx_read_events[fd], NGX_READ_EVENT, 0);
}
+}
+void ngx_worker(ngx_log_t *log)
+{
while (1) {
ngx_log_debug(log, "ngx_worker cycle");
diff --git a/src/event/ngx_event.h b/src/event/ngx_event.h
index 9f758d33a..7daaa869a 100644
--- a/src/event/ngx_event.h
+++ b/src/event/ngx_event.h
@@ -4,7 +4,10 @@
#include <ngx_config.h>
#include <ngx_types.h>
+#include <ngx_socket.h>
#include <ngx_log.h>
+#include <ngx_alloc.h>
+#include <ngx_array.h>
typedef struct ngx_event_s ngx_event_t;
@@ -76,13 +79,12 @@ typedef struct {
*/
} ngx_event_actions_t;
-/*
+/*
NGX_LEVEL_EVENT (default) select, poll, kqueue
requires to read whole data
NGX_ONESHOT_EVENT kqueue
NGX_CLEAR_EVENT kqueue
-
*/
#if (HAVE_KQUEUE)
@@ -135,7 +137,8 @@ extern ngx_event_type_e ngx_event_type;
#endif
-void ngx_worker(ngx_listen_t *sock, int n, ngx_pool_t *pool, ngx_log_t *log);
+void ngx_pre_thread(ngx_array_t *ls, ngx_pool_t *pool, ngx_log_t *log);
+void ngx_worker(ngx_log_t *log);
#endif /* _NGX_EVENT_H_INCLUDED_ */
diff --git a/src/event/ngx_event_accept.c b/src/event/ngx_event_accept.c
index 0cadf543f..e7edddb57 100644
--- a/src/event/ngx_event_accept.c
+++ b/src/event/ngx_event_accept.c
@@ -38,6 +38,12 @@ int ngx_event_accept(ngx_event_t *ev)
ngx_log_debug(ev->log, "ngx_event_accept: accepted socket: %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));
@@ -69,7 +75,7 @@ int ngx_event_accept(ngx_event_t *ev)
ngx_read_events[s].ready = 1;
#endif
- cn->server->handler(&ngx_connections[s]);
+ cn->handler(&ngx_connections[s]);
#if (HAVE_KQUEUE)
#if !(USE_KQUEUE)
diff --git a/src/event/ngx_event_write.c b/src/event/ngx_event_write.c
index 965a87c99..b8411a432 100644
--- a/src/event/ngx_event_write.c
+++ b/src/event/ngx_event_write.c
@@ -99,6 +99,7 @@ ngx_chain_t *ngx_event_write(ngx_connection_t *cn, ngx_chain_t *in,
} else {
rc = ngx_sendv(cn->fd, (ngx_iovec_t *) header->elts,
header->nelts, (size_t *) &sent);
+ ngx_log_debug(cn->log, "sendv: %d" _ sent);
}
#if (HAVE_MAX_SENDFILE_IOVEC)
}
@@ -110,14 +111,26 @@ ngx_chain_t *ngx_event_write(ngx_connection_t *cn, ngx_chain_t *in,
flush -= sent;
- for (ch = in; ch && !(ch->hunk->type & NGX_HUNK_LAST); ch = ch->next) {
+ for (ch = in; ch; ch = ch->next) {
if (sent >= ch->hunk->last.file - ch->hunk->pos.file) {
sent -= ch->hunk->last.file - ch->hunk->pos.file;
ch->hunk->last.file = ch->hunk->pos.file;
- continue;
+
+ ngx_log_debug(cn->log, "event write: %qx 0" _
+ ch->hunk->pos.file);
+
+ if (ch->hunk->type & NGX_HUNK_LAST)
+ break;
+
+ continue;
}
ch->hunk->pos.file += sent;
+
+ ngx_log_debug(cn->log, "event write: %qx %qd" _
+ ch->hunk->pos.file _
+ ch->hunk->last.file - ch->hunk->pos.file);
+
break;
}