diff options
| author | Igor Sysoev <igor@sysoev.ru> | 2002-08-20 14:48:28 +0000 |
|---|---|---|
| committer | Igor Sysoev <igor@sysoev.ru> | 2002-08-20 14:48:28 +0000 |
| commit | 2b54238a5f2edcca568c0676a779ef79ba152c91 (patch) | |
| tree | 2cb7eb660e691eaab2c4f031adf881b7c88bffc9 /src/event | |
| parent | e0af1b89dcd100462a3195534b2f78a838ca85b5 (diff) | |
| download | nginx-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.c | 22 | ||||
| -rw-r--r-- | src/event/ngx_event.h | 9 | ||||
| -rw-r--r-- | src/event/ngx_event_accept.c | 8 | ||||
| -rw-r--r-- | src/event/ngx_event_write.c | 17 |
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; } |
