Mercurial > hg > nginx-quic
changeset 355:0fb6c53fb135
nginx-0.0.7-2004-06-15-21:47:16 import
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Tue, 15 Jun 2004 17:47:16 +0000 |
parents | eaf1f651cf86 |
children | 2e3cbc1bbe3c |
files | auto/func auto/os/conf auto/os/freebsd auto/os/linux auto/sources auto/unix src/core/ngx_config.h src/event/modules/ngx_select_module.c src/event/ngx_event.c src/http/modules/ngx_http_gzip_filter.c src/os/unix/ngx_freebsd_config.h src/os/unix/ngx_linux_config.h src/os/unix/ngx_posix_config.h src/os/unix/ngx_posix_init.c src/os/unix/ngx_process.c src/os/unix/ngx_process.h src/os/unix/ngx_process_cycle.c src/os/unix/ngx_solaris_config.h |
diffstat | 18 files changed, 197 insertions(+), 93 deletions(-) [+] |
line wrap: on
line diff
--- a/auto/func +++ b/auto/func @@ -5,10 +5,11 @@ echo "checking for $ngx_func" >> $NGX_ER ngx_found=no -func=`echo $ngx_func | sed -e 's/()$//' | tr '[a-z]' '[A-Z]'` +func=`echo $ngx_func | sed -e 's/()$//' | tr '[a-z.]' '[A-Z_]'` cat << END > $NGX_AUTOTEST.c +#include <sys/types.h> $NGX_UNISTD_H $ngx_func_inc
--- a/auto/os/conf +++ b/auto/os/conf @@ -45,4 +45,10 @@ case $PLATFORM in CORE_LIBS="$CORE_LIBS ws2_32.lib" ;; + *) + CORE_INCS="$UNIX_INCS" + CORE_DEPS="$UNIX_DEPS $POSIX_DEPS" + CORE_SRCS="$UNIX_SRCS" + ;; + esac
--- a/auto/os/freebsd +++ b/auto/os/freebsd @@ -66,6 +66,3 @@ if [ $EVENT_AIO = YES ]; then else have=HAVE_AIO . auto/nohave fi - - -have=HAVE_MSGHDR_MSG_CONTROL . auto/have
--- a/auto/os/linux +++ b/auto/os/linux @@ -77,6 +77,3 @@ ngx_func_test="prctl(PR_SET_DUMPABLE, 1, if [ $ngx_found = yes ]; then have=HAVE_PR_SET_DUMPABLE . auto/have fi - - -have=HAVE_MSGHDR_MSG_CONTROL . auto/have
--- a/auto/sources +++ b/auto/sources @@ -125,6 +125,8 @@ UNIX_SRCS="$CORE_SRCS $EVENT_SRCS \ src/os/unix/ngx_posix_init.c \ src/os/unix/ngx_process_cycle.c" +POSIX_DEPS=src/os/unix/ngx_posix_config.h + FREEBSD_DEPS=src/os/unix/ngx_freebsd_config.h FREEBSD_SRCS=src/os/unix/ngx_freebsd_init.c FREEBSD_SENDFILE_SRCS=src/os/unix/ngx_freebsd_sendfile_chain.c
--- a/auto/unix +++ b/auto/unix @@ -41,8 +41,7 @@ ngx_types="int"; . auto/types/typedef ngx_func="sin_len" -ngx_func_inc="#include <sys/types.h> -#include <sys/socket.h> +ngx_func_inc="#include <sys/socket.h> #include <netinet/in.h>" ngx_func_test="struct sockaddr_in sa; sa.sin_len = 5" @@ -122,3 +121,15 @@ ngx_func="memalign()" ngx_func_inc="#include <stdlib.h>" ngx_func_test="void *p; p = memalign(4096, 4096)" . auto/func + + +ngx_func="msghdr.msg_control" +ngx_func_inc="#include <sys/socket.h>" +ngx_func_test="struct msghdr msg; msg.msg_control = NULL" +. auto/func + + +ngx_func="FIONBIO" +ngx_func_inc="#include <sys/filio.h>" +ngx_func_test="int i; i = FIONBIO" +. auto/func
--- a/src/core/ngx_config.h +++ b/src/core/ngx_config.h @@ -22,17 +22,11 @@ #elif defined _WIN32 - -/* STUB to allocate a big ngx_connections */ -#undef FD_SETSIZE -#define FD_SETSIZE 1024 - #include <ngx_win32_config.h> #else /* posix */ - -#include <ngx_auto_config.h> +#include <ngx_posix_config.h> #endif
--- a/src/event/modules/ngx_select_module.c +++ b/src/event/modules/ngx_select_module.c @@ -596,12 +596,14 @@ static char *ngx_select_init_conf(ngx_cy /* disable warning: the default FD_SETSIZE is 1024U in FreeBSD 5.x */ +#if !(WIN32) if ((unsigned) ecf->connections > FD_SETSIZE) { ngx_log_error(NGX_LOG_EMERG, cycle->log, 0, "the maximum number of files " "supported by select() is " ngx_value(FD_SETSIZE)); return NGX_CONF_ERROR; } +#endif return NGX_CONF_OK; }
--- a/src/event/ngx_event.c +++ b/src/event/ngx_event.c @@ -658,8 +658,12 @@ static char *ngx_event_init_conf(ngx_cyc #elif (HAVE_SELECT) +#if (WIN32) + ngx_conf_init_unsigned_value(ecf->connections, DEFAULT_CONNECTIONS); +#else ngx_conf_init_unsigned_value(ecf->connections, FD_SETSIZE < DEFAULT_CONNECTIONS ? FD_SETSIZE : DEFAULT_CONNECTIONS); +#endif ngx_conf_init_value(ecf->use, ngx_select_module.ctx_index); ngx_conf_init_ptr_value(ecf->name, ngx_select_module_ctx.name->data);
--- a/src/http/modules/ngx_http_gzip_filter.c +++ b/src/http/modules/ngx_http_gzip_filter.c @@ -668,7 +668,15 @@ static int ngx_http_gzip_body_filter(ngx trailer->crc32 = ctx->crc32; trailer->zlen = ctx->zin; #else - /* STUB */ Oops ! + trailer->crc32[0] = ctx->crc32 & 0xff; + trailer->crc32[1] = (ctx->crc32 >> 8) & 0xff; + trailer->crc32[2] = (ctx->crc32 >> 16) & 0xff; + trailer->crc32[3] = (ctx->crc32 >> 24) & 0xff; + + trailer->zlen[0] = ctx->zin & 0xff; + trailer->zlen[1] = (ctx->zin >> 8) & 0xff; + trailer->zlen[2] = (ctx->zin >> 16) & 0xff; + trailer->zlen[3] = (ctx->zin >> 24) & 0xff; #endif ctx->zstream.avail_in = 0;
--- a/src/os/unix/ngx_freebsd_config.h +++ b/src/os/unix/ngx_freebsd_config.h @@ -2,35 +2,38 @@ #define _NGX_FREEBSD_CONFIG_H_INCLUDED_ +#include <sys/types.h> +#include <sys/time.h> #include <unistd.h> -#include <stddef.h> /* offsetof() */ -#include <stdlib.h> #include <stdarg.h> +#include <stddef.h> /* offsetof() */ #include <stdio.h> +#include <stdlib.h> #include <errno.h> -#include <fcntl.h> #include <string.h> #include <signal.h> -#include <limits.h> -#include <sys/types.h> +#include <pwd.h> +#include <grp.h> +#include <dirent.h> + +#include <sys/uio.h> +#include <sys/filio.h> /* FIONBIO */ #include <sys/stat.h> -#include <sys/time.h> -#include <sys/uio.h> -#include <sys/ioctl.h> -#include <sys/resource.h> -#include <sys/sysctl.h> +#include <fcntl.h> + #include <sys/wait.h> #include <sys/mman.h> +#include <sys/resource.h> + #include <sys/socket.h> #include <netinet/in.h> +#include <arpa/inet.h> +#include <netdb.h> + +#include <libutil.h> /* setproctitle() before 4.1 */ +#include <osreldate.h> +#include <sys/sysctl.h> #include <netinet/tcp.h> /* TCP_NOPUSH */ -#include <arpa/inet.h> -#include <pwd.h> -#include <grp.h> -#include <netdb.h> -#include <dirent.h> -#include <libutil.h> /* setproctitle() brefore 4.1 */ -#include <osreldate.h> #include <ngx_auto_config.h> @@ -89,11 +92,6 @@ pid_t rfork_thread(int flags, void *stac #endif -#ifndef HAVE_FIONBIO -#define HAVE_FIONBIO 1 -#endif - - /* STUB: autoconf */ #define ngx_setproctitle setproctitle
--- a/src/os/unix/ngx_linux_config.h +++ b/src/os/unix/ngx_linux_config.h @@ -8,35 +8,43 @@ #define _LARGEFILE_SOURCE -#include <unistd.h> -#include <stddef.h> /* offsetof() */ -#include <stdlib.h> -#include <stdarg.h> -#include <stdio.h> -#include <errno.h> -#include <fcntl.h> -#include <string.h> -#include <signal.h> -#include <limits.h> -#include <time.h> #include <sys/types.h> #include <sys/time.h> -#include <sys/select.h> +#include <unistd.h> +#include <stdarg.h> +#include <stddef.h> /* offsetof() */ +#include <stdio.h> +#include <stdlib.h> +#include <errno.h> +#include <string.h> +#include <signal.h> +#include <pwd.h> +#include <grp.h> +#include <dirent.h> + #include <sys/uio.h> -#include <sys/ioctl.h> -#include <sys/resource.h> -#include <sys/sysctl.h> +#include <sys/stat.h> +#include <fcntl.h> + #include <sys/wait.h> #include <sys/mman.h> +#include <sys/resource.h> + #include <sys/socket.h> #include <netinet/in.h> +#include <arpa/inet.h> +#include <netdb.h> + +#include <time.h> /* tzset() */ +#include <sys/ioctl.h> +#include <sys/sysctl.h> #include <netinet/tcp.h> /* TCP_CORK */ -#include <arpa/inet.h> -#include <pwd.h> -#include <grp.h> -#include <netdb.h> -#include <dirent.h> + +/* Linux has no <sys/filio.h> so autoconfigure does not find FIONBIO */ +#ifndef HAVE_FIONBIO +#define HAVE_FIONBIO 1 +#endif #include <ngx_auto_config.h> @@ -80,11 +88,6 @@ extern ssize_t sendfile(int s, int fd, i #endif -#ifndef HAVE_FIONBIO -#define HAVE_FIONBIO 1 -#endif - - #ifndef HAVE_SELECT_CHANGE_TIMEOUT #define HAVE_SELECT_CHANGE_TIMEOUT 1 #endif
new file mode 100644 --- /dev/null +++ b/src/os/unix/ngx_posix_config.h @@ -0,0 +1,55 @@ +#ifndef _NGX_POSIX_CONFIG_H_INCLUDED_ +#define _NGX_POSIX_CONFIG_H_INCLUDED_ + + +#include <sys/types.h> +#include <sys/time.h> +#include <unistd.h> +#include <stdarg.h> +#include <stddef.h> /* offsetof() */ +#include <stdio.h> +#include <stdlib.h> +#include <errno.h> +#include <string.h> +#include <signal.h> +#include <pwd.h> +#include <grp.h> +#include <dirent.h> + +#include <sys/uio.h> +#include <sys/filio.h> /* FIONBIO */ +#include <sys/stat.h> +#include <fcntl.h> + +#include <sys/wait.h> +#include <sys/mman.h> +#include <sys/resource.h> + +#include <sys/socket.h> +#include <netinet/in.h> +#include <arpa/inet.h> +#include <netdb.h> + +#include <ngx_auto_config.h> + + +#ifndef HAVE_SELECT +#define HAVE_SELECT 1 +#endif + + +#ifndef HAVE_POLL +#define HAVE_POLL 1 +#endif +#if (HAVE_POLL) +#include <poll.h> +#endif + + +#define ngx_setproctitle(title) + + +#define NGX_POSIX_IO 1 + + +#endif /* _NGX_POSIX_CONFIG_H_INCLUDED_ */
--- a/src/os/unix/ngx_posix_init.c +++ b/src/os/unix/ngx_posix_init.c @@ -7,6 +7,26 @@ int ngx_max_sockets; int ngx_inherited_nonblocking; +#if (NGX_POSIX_IO) + +ngx_os_io_t ngx_os_io = { + ngx_unix_recv, + ngx_readv_chain, + NULL, + ngx_writev_chain, + 0 +}; + + +int ngx_os_init(ngx_log_t *log) +{ + return ngx_posix_init(log); +} + + +#endif + + void ngx_signal_handler(int signo);
--- a/src/os/unix/ngx_process.c +++ b/src/os/unix/ngx_process.c @@ -6,6 +6,7 @@ static void ngx_execute_proc(ngx_cycle_t *cycle, void *data); +ngx_int_t ngx_current_slot; ngx_int_t ngx_last_process; ngx_socket_t ngx_channel; ngx_process_t ngx_processes[NGX_MAX_PROCESSES]; @@ -44,6 +45,7 @@ ngx_pid_t ngx_spawn_process(ngx_cycle_t } ngx_channel = ngx_processes[s].channel[1]; + ngx_current_slot = s; pid = fork();
--- a/src/os/unix/ngx_process.h +++ b/src/os/unix/ngx_process.h @@ -49,6 +49,7 @@ ngx_pid_t ngx_execute(ngx_cycle_t *cycle void ngx_process_get_status(void); extern ngx_pid_t ngx_pid; +extern ngx_int_t ngx_current_slot; extern ngx_int_t ngx_last_process; extern ngx_socket_t ngx_channel; extern ngx_process_t ngx_processes[NGX_MAX_PROCESSES];
--- a/src/os/unix/ngx_process_cycle.c +++ b/src/os/unix/ngx_process_cycle.c @@ -527,10 +527,16 @@ static void ngx_worker_process_cycle(ngx } } - for (n = 0; n < ngx_last_process; n++) { + for (n = 0; n <= ngx_last_process; n++) { - ngx_log_debug1(NGX_LOG_DEBUG_CORE, cycle->log, 0, - "close channel %d", ngx_processes[n].channel[1]); + if (n == ngx_current_slot) { + if (close(ngx_processes[n].channel[0]) == -1) { + ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno, + "close() failed"); + } + + continue; + } if (close(ngx_processes[n].channel[1]) == -1) { ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno, @@ -538,11 +544,6 @@ static void ngx_worker_process_cycle(ngx } } - if (close(ngx_processes[ngx_last_process].channel[0]) == -1) { - ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno, - "close() failed"); - } - #if 0 ngx_last_process = 0; #endif @@ -737,7 +738,7 @@ ngx_int_t ngx_write_channel(ngx_socket_t msg.msg_controllen = 0; } else { - msg.msg_control = &cm; + msg.msg_control = (caddr_t) &cm; msg.msg_controllen = sizeof(struct cmsghdr) + sizeof(int); cm.cmsg_len = sizeof(struct cmsghdr) + sizeof(int); @@ -802,7 +803,7 @@ ngx_int_t ngx_read_channel(ngx_socket_t msg.msg_iovlen = 1; #if (HAVE_MSGHDR_MSG_CONTROL) - msg.msg_control = &cm; + msg.msg_control = (caddr_t) &cm; msg.msg_controllen = sizeof(struct cmsghdr) + sizeof(int); #else msg.msg_accrights = (caddr_t) &fd; @@ -830,7 +831,7 @@ ngx_int_t ngx_read_channel(ngx_socket_t #if (HAVE_MSGHDR_MSG_CONTROL) if (ch->command == NGX_CMD_OPEN_CHANNEL) { - cm = msg.msg_control; + cm = (struct cmsghdr *) msg.msg_control; if (cm == NULL) { ngx_log_error(NGX_LOG_ALERT, log, 0,
--- a/src/os/unix/ngx_solaris_config.h +++ b/src/os/unix/ngx_solaris_config.h @@ -6,33 +6,40 @@ #define _REENTRANT -#define _FILE_OFFSET_BITS 64 /* must be before sys/types.h */ +#define _FILE_OFFSET_BITS 64 /* must be before <sys/types.h> */ +#include <sys/types.h> +#include <sys/time.h> #include <unistd.h> -#include <inttypes.h> +#include <stdarg.h> #include <stddef.h> /* offsetof() */ +#include <stdio.h> #include <stdlib.h> -#include <stdarg.h> -#include <stdio.h> #include <errno.h> -#include <fcntl.h> #include <string.h> #include <signal.h> -#include <limits.h> -#include <sys/types.h> +#include <pwd.h> +#include <grp.h> +#include <dirent.h> + +#include <sys/uio.h> +#include <sys/filio.h> /* FIONBIO */ #include <sys/stat.h> +#include <fcntl.h> + #include <sys/wait.h> #include <sys/mman.h> +#include <sys/resource.h> + #include <sys/socket.h> -#include <sys/sendfile.h> -#include <sys/filio.h> /* FIONBIO */ -#include <sys/systeminfo.h> #include <netinet/in.h> #include <arpa/inet.h> -#include <pwd.h> -#include <grp.h> #include <netdb.h> -#include <dirent.h> + +#include <sys/sendfile.h> +#include <sys/systeminfo.h> +#include <limits.h> /* IOV_MAX */ +#include <inttypes.h> #include <ngx_auto_config.h> @@ -66,11 +73,6 @@ #endif -#ifndef HAVE_FIONBIO -#define HAVE_FIONBIO 1 -#endif - - #define ngx_setproctitle(title)