diff options
Diffstat (limited to 'src/core')
| -rw-r--r-- | src/core/nginx.c | 30 | ||||
| -rw-r--r-- | src/core/ngx_conf_file.h | 4 | ||||
| -rw-r--r-- | src/core/ngx_connection.h | 78 | ||||
| -rw-r--r-- | src/core/ngx_log.c | 2 | ||||
| -rw-r--r-- | src/core/ngx_modules.c | 10 |
5 files changed, 97 insertions, 27 deletions
diff --git a/src/core/nginx.c b/src/core/nginx.c index 295e2a946..4f3be980c 100644 --- a/src/core/nginx.c +++ b/src/core/nginx.c @@ -2,9 +2,7 @@ #include <ngx_config.h> #include <ngx_core.h> - -#include <ngx_listen.h> - +#include <ngx_event.h> #include <nginx.h> @@ -61,7 +59,7 @@ int main(int argc, char *const *argv) { ngx_init_array(ngx_listening_sockets, - ngx_pool, 10, sizeof(ngx_listen_t), + ngx_pool, 10, sizeof(ngx_listening_t), 1); ngx_memzero(&conf, sizeof(ngx_conf_t)); @@ -126,10 +124,10 @@ int main(int argc, char *const *argv) static int ngx_open_listening_sockets(ngx_log_t *log) { - int times, failed, reuseaddr, i; - ngx_err_t err; - ngx_socket_t s; - ngx_listen_t *ls; + int times, failed, reuseaddr, i; + ngx_err_t err; + ngx_socket_t s; + ngx_listening_t *ls; reuseaddr = 1; @@ -137,7 +135,8 @@ static int ngx_open_listening_sockets(ngx_log_t *log) failed = 0; /* for each listening socket */ - ls = (ngx_listen_t *) ngx_listening_sockets.elts; + + ls = ngx_listening_sockets.elts; for (i = 0; i < ngx_listening_sockets.nelts; i++) { if (ls[i].bound) @@ -161,6 +160,19 @@ static int ngx_open_listening_sockets(ngx_log_t *log) return NGX_ERROR; } +#if (WIN32) + /* + * Winsock assignes a socket number divisible by 4 + * so to find a connection we divide a socket number by 4. + */ + + if (s % 4) { + ngx_log_error(NGX_LOG_EMERG, ls->log, 0, + ngx_socket_n " created socket %d", s); + return NGX_ERROR; + } +#endif + if (setsockopt(s, SOL_SOCKET, SO_REUSEADDR, (const void *) &reuseaddr, sizeof(int)) == -1) { ngx_log_error(NGX_LOG_EMERG, log, ngx_socket_errno, diff --git a/src/core/ngx_conf_file.h b/src/core/ngx_conf_file.h index b517ff0f9..046ee2c75 100644 --- a/src/core/ngx_conf_file.h +++ b/src/core/ngx_conf_file.h @@ -123,8 +123,8 @@ struct ngx_conf_s { } #define ngx_conf_merge_size_value(conf, prev, default) \ - if (conf == (size_t) NGX_CONF_UNSET) { \ - conf = (prev == (size_t) NGX_CONF_UNSET) ? default : prev; \ + if (conf == (ssize_t) NGX_CONF_UNSET) { \ + conf = (prev == (ssize_t) NGX_CONF_UNSET) ? default : prev; \ } #define ngx_conf_merge_str_value(conf, prev, default) \ diff --git a/src/core/ngx_connection.h b/src/core/ngx_connection.h index 81b5987ca..1bd97f2bb 100644 --- a/src/core/ngx_connection.h +++ b/src/core/ngx_connection.h @@ -1,45 +1,98 @@ #ifndef _NGX_CONNECTION_H_INCLUDED_ #define _NGX_CONNECTION_H_INCLUDED_ + #include <ngx_config.h> #include <ngx_core.h> -#include <ngx_event.h> -struct ngx_connection_s { - ngx_socket_t fd; - void *data; +typedef struct { + ngx_socket_t fd; + + struct sockaddr *sockaddr; + socklen_t socklen; /* size of sockaddr */ + int addr; /* offset to address in sockaddr */ + int addr_text_max_len; + ngx_str_t addr_text; + + int family; + int type; + int protocol; + int flags; /* Winsock2 flags */ + + void (*handler)(ngx_connection_t *c); /* handler of accepted + connection */ + void *ctx; /* ngx_http_conf_ctx_t, for example */ + void *servers; /* array of ngx_http_in_addr_t, for example */ + + ngx_log_t *log; + int backlog; + + int pool_size; + int post_accept_buffer_size; /* should be here because + of the AcceptEx() preread */ + time_t post_accept_timeout; /* should be here because + of the deferred accept */ + + unsigned bound:1; /* already bound */ + unsigned inherited:1; /* inherited from previous process */ + unsigned nonblocking_accept:1; + unsigned nonblocking:1; +#if 0 + unsigned overlapped:1; /* Winsock2 overlapped */ +#endif + unsigned shared:1; /* shared between threads or processes */ +#if (HAVE_DEFERRED_ACCEPT) + unsigned deferred_accept:1; +#endif +} ngx_listening_t; -#ifdef NGX_EVENT + +struct ngx_connection_s { + void *data; ngx_event_t *read; ngx_event_t *write; -#endif + + ngx_socket_t fd; + + ngx_listening_t *listening; off_t sent; +#if 0 void (*handler)(ngx_connection_t *c); +#endif void *ctx; void *servers; + ngx_log_t *log; ngx_pool_t *pool; +#if 0 int pool_size; int family; +#endif + struct sockaddr *sockaddr; socklen_t socklen; + ngx_str_t addr_text; + #if (HAVE_IOCP) struct sockaddr *local_sockaddr; socklen_t local_socklen; - void *listening; #endif + +#if 0 int addr; int addr_text_max_len; - ngx_str_t addr_text; +#endif ngx_hunk_t *buffer; +#if 0 unsigned int post_accept_timeout; +#endif int number; @@ -47,9 +100,15 @@ struct ngx_connection_s { unsigned unexpected_eof:1; unsigned tcp_nopush:1; unsigned tcp_nopush_enabled:1; +#if (HAVE_IOCP) + unsigned accept_context_updated:1; +#endif }; + + + #if 0 cached file int fd; -2 unused, -1 closed (but read or mmaped), >=0 open @@ -84,8 +143,9 @@ typedef struct { #endif -extern ngx_os_io_t ngx_io; +extern ngx_array_t ngx_listening_sockets; +extern ngx_os_io_t ngx_io; extern ngx_chain_t *(*ngx_write_chain_proc) diff --git a/src/core/ngx_log.c b/src/core/ngx_log.c index 55807ef7c..3da25f0a5 100644 --- a/src/core/ngx_log.c +++ b/src/core/ngx_log.c @@ -77,7 +77,7 @@ void ngx_log_error_core(int level, ngx_log_t *log, ngx_err_t err, /* pid#tid */ len += ngx_snprintf(errstr + len, sizeof(errstr) - len - 1, - "%d#%d: ", ngx_getpid(), 0); + PID_FMT "#%d: ", ngx_getpid(), 0); #if (HAVE_VARIADIC_MACROS) va_start(args, fmt); diff --git a/src/core/ngx_modules.c b/src/core/ngx_modules.c index 4780570bc..0dbcde64d 100644 --- a/src/core/ngx_modules.c +++ b/src/core/ngx_modules.c @@ -17,11 +17,10 @@ extern ngx_module_t ngx_kqueue_module; #if (HAVE_DEVPOLL) extern ngx_module_t ngx_devpoll_module; #endif -#if (HAVE_AIO) -extern ngx_module_t ngx_aio_module; -#endif #if (HAVE_IOCP) extern ngx_module_t ngx_iocp_module; +#elif (HAVE_AIO) +extern ngx_module_t ngx_aio_module; #endif @@ -64,11 +63,10 @@ ngx_module_t *ngx_modules[] = { #if (HAVE_DEVPOLL) &ngx_devpoll_module, #endif -#if (HAVE_AIO) - &ngx_aio_module, -#endif #if (HAVE_IOCP) &ngx_iocp_module, +#elif (HAVE_AIO) + &ngx_aio_module, #endif /* http */ |
