nginx-0.0.2-2004-03-04-10:04:55 import
This commit is contained in:
parent
7d9e94d186
commit
7ae0b62490
36 changed files with 930 additions and 131 deletions
33
auto/make
33
auto/make
|
@ -36,21 +36,29 @@ echo >> $MAKEFILE
|
|||
echo "CORE_DEPS = \\" >> $MAKEFILE
|
||||
for dep in $CORE_DEPS
|
||||
do
|
||||
if [ $PLATFORM = win32 ]; then
|
||||
dep=`echo $dep | sed -e "s/\//\\\\\\/g"`
|
||||
fi
|
||||
echo " $dep \\" >> $MAKEFILE
|
||||
done
|
||||
echo >> $MAKEFILE
|
||||
|
||||
echo "CORE_INCS = $CORE_INCS -I $OBJS" >> $MAKEFILE
|
||||
inc=`echo "$CORE_INCS -I $OBJS" | sed -e "s/\//\\\\\\/g"`
|
||||
echo "CORE_INCS = $inc" >> $MAKEFILE
|
||||
echo >> $MAKEFILE
|
||||
|
||||
echo "HTTP_DEPS = \\" >> $MAKEFILE
|
||||
for inc in $HTTP_DEPS
|
||||
do
|
||||
if [ $PLATFORM = win32 ]; then
|
||||
inc=`echo $inc | sed -e "s/\//\\\\\\/g"`
|
||||
fi
|
||||
echo " $inc \\" >> $MAKEFILE
|
||||
done
|
||||
echo >> $MAKEFILE
|
||||
|
||||
echo "HTTP_INCS = $HTTP_INCS" >> $MAKEFILE
|
||||
inc=`echo "$HTTP_INCS" | sed -e "s/\//\\\\\\/g"`
|
||||
echo "HTTP_INCS = $inc" >> $MAKEFILE
|
||||
echo >> $MAKEFILE
|
||||
|
||||
|
||||
|
@ -60,12 +68,21 @@ echo "nginx: \\" >> $MAKEFILE
|
|||
for src in $CORE_SRCS $HTTP_SRCS
|
||||
do
|
||||
obj=`echo $src | sed -e "s/\.c\$/.$OBJEXT/" -e "s/\.S\$/.$OBJEXT/"`
|
||||
echo " $OBJS/$obj \\" >> $MAKEFILE
|
||||
obj="$OBJS/$obj"
|
||||
if [ $PLATFORM = win32 ]; then
|
||||
obj=`echo $obj | sed -e "s/\//\\\\\\/g"`
|
||||
fi
|
||||
|
||||
echo " $obj \\" >> $MAKEFILE
|
||||
done
|
||||
|
||||
for src in $NGX_MODULES_C $LINK_DEPS
|
||||
do
|
||||
obj=`echo $src | sed -e "s/\.c\$/.$OBJEXT/"`
|
||||
if [ $PLATFORM = win32 ]; then
|
||||
obj=`echo $obj | sed -e "s/\//\\\\\\/g"`
|
||||
fi
|
||||
|
||||
echo " $obj \\" >> $MAKEFILE
|
||||
done
|
||||
|
||||
|
@ -75,10 +92,18 @@ echo " \$(CC) ${BINOUT}nginx \\" >> $MAKEFILE
|
|||
for src in $CORE_SRCS $HTTP_SRCS
|
||||
do
|
||||
obj=`echo $src | sed -e "s/\.c\$/.$OBJEXT/" -e "s/\.S\$/.$OBJEXT/"`
|
||||
echo " $OBJS/$obj \\" >> $MAKEFILE
|
||||
obj="$OBJS/$obj"
|
||||
if [ $PLATFORM = win32 ]; then
|
||||
obj=`echo $obj | sed -e "s/\//\\\\\\/g"`
|
||||
fi
|
||||
|
||||
echo " $obj \\" >> $MAKEFILE
|
||||
done
|
||||
|
||||
obj=`echo $NGX_MODULES_C | sed -e "s/\.c\$/.$OBJEXT/"`
|
||||
if [ $PLATFORM = win32 ]; then
|
||||
obj=`echo $obj | sed -e "s/\//\\\\\\/g"`
|
||||
fi
|
||||
echo " $obj \\" >> $MAKEFILE
|
||||
echo " $CORE_LIBS \\" >> $MAKEFILE
|
||||
echo " $CORE_LINK" >> $MAKEFILE
|
||||
|
|
|
@ -32,8 +32,10 @@ case $PLATFORM in
|
|||
CORE_DEPS="$WIN32_DEPS"
|
||||
CORE_SRCS="$WIN32_SRCS $SELECT_SRCS $IOCP_SRCS"
|
||||
EVENT_MODULES="$EVENT_MODULES $SELECT_MODULE $IOCP_MODULE"
|
||||
EVENT_FOUND=YES
|
||||
|
||||
CFLAGS="$CFLAGS -D HAVE_AIO=1 -D HAVE_IOCP=1"
|
||||
have=HAVE_AIO . auto/have
|
||||
have=HAVE_IOCP . auto/have
|
||||
CORE_LIBS="$CORE_LIBS ws2_32.lib"
|
||||
|
||||
# msvcrt.dll
|
||||
|
|
15
auto/sources
15
auto/sources
|
@ -103,20 +103,21 @@ UNIX_DEPS="$CORE_DEPS $EVENT_DEPS \
|
|||
src/os/unix/ngx_process.h \
|
||||
src/os/unix/ngx_thread.h \
|
||||
src/os/unix/ngx_socket.h \
|
||||
src/os/unix/ngx_os.h"
|
||||
src/os/unix/ngx_os.h \
|
||||
src/os/unix/ngx_process_cycle.h"
|
||||
|
||||
UNIX_SRCS="$CORE_SRCS $EVENT_SRCS \
|
||||
src/os/unix/ngx_time.c \
|
||||
src/os/unix/ngx_errno.c \
|
||||
src/os/unix/ngx_sendv.c \
|
||||
src/os/unix/ngx_files.c \
|
||||
src/os/unix/ngx_socket.c \
|
||||
src/os/unix/ngx_recv.c \
|
||||
src/os/unix/ngx_readv_chain.c \
|
||||
src/os/unix/ngx_writev_chain.c \
|
||||
src/os/unix/ngx_posix_init.c \
|
||||
src/os/unix/ngx_daemon.c \
|
||||
src/os/unix/ngx_process.c \
|
||||
src/os/unix/ngx_daemon.c"
|
||||
src/os/unix/ngx_posix_init.c \
|
||||
src/os/unix/ngx_process_cycle.c"
|
||||
|
||||
FREEBSD_DEPS=src/os/unix/ngx_freebsd_config.h
|
||||
FREEBSD_SRCS=src/os/unix/ngx_freebsd_init.c
|
||||
|
@ -144,18 +145,20 @@ WIN32_DEPS="$CORE_DEPS $EVENT_DEPS \
|
|||
src/os/win32/ngx_files.h \
|
||||
src/os/win32/ngx_process.h \
|
||||
src/os/win32/ngx_socket.h \
|
||||
src/os/win32/ngx_os.h"
|
||||
src/os/win32/ngx_os.h \
|
||||
src/os/win32/ngx_process_cycle.h"
|
||||
|
||||
WIN32_SRCS="$CORE_SRCS $EVENT_SRCS \
|
||||
src/os/win32/ngx_errno.c \
|
||||
src/os/win32/ngx_files.c \
|
||||
src/os/win32/ngx_time.c \
|
||||
src/os/win32/ngx_process.c \
|
||||
src/os/win32/ngx_socket.c \
|
||||
src/os/win32/ngx_wsarecv.c \
|
||||
src/os/win32/ngx_wsarecv_chain.c \
|
||||
src/os/win32/ngx_wsasend_chain.c \
|
||||
src/os/win32/ngx_sendv.c \
|
||||
src/os/win32/ngx_win32_init.c \
|
||||
src/os/win32/ngx_process_cycle.c \
|
||||
src/event/ngx_event_acceptex.c"
|
||||
|
||||
|
||||
|
|
|
@ -5,6 +5,8 @@
|
|||
#include <nginx.h>
|
||||
|
||||
|
||||
#if 0
|
||||
|
||||
typedef struct {
|
||||
ngx_flag_t daemon;
|
||||
ngx_flag_t master;
|
||||
|
@ -30,8 +32,10 @@ static void ngx_worker_process_cycle(ngx_cycle_t *cycle, void *data);
|
|||
#if (NGX_THREADS)
|
||||
static int ngx_worker_thread_cycle(void *data);
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
static ngx_int_t ngx_add_inherited_sockets(ngx_cycle_t *cycle, char **envp);
|
||||
static ngx_pid_t ngx_exec_new_binary(ngx_cycle_t *cycle, char *const *argv);
|
||||
static ngx_int_t ngx_getopt(ngx_master_ctx_t *ctx, ngx_cycle_t *cycle);
|
||||
static ngx_int_t ngx_core_module_init(ngx_cycle_t *cycle);
|
||||
static char *ngx_set_user(ngx_conf_t *cf, ngx_command_t *cmd, void *conf);
|
||||
|
@ -110,11 +114,9 @@ ngx_int_t ngx_change_binary;
|
|||
|
||||
int main(int argc, char *const *argv, char **envp)
|
||||
{
|
||||
ngx_fd_t fd;
|
||||
ngx_int_t i;
|
||||
ngx_log_t *log;
|
||||
ngx_cycle_t *cycle, init_cycle;
|
||||
ngx_open_file_t *file;
|
||||
ngx_core_conf_t *ccf;
|
||||
ngx_master_ctx_t ctx;
|
||||
#if !(WIN32)
|
||||
|
@ -254,6 +256,8 @@ int main(int argc, char *const *argv, char **envp)
|
|||
}
|
||||
|
||||
|
||||
#if 0
|
||||
|
||||
/* TODO: broken NGX_PROCESS_SINGLE */
|
||||
|
||||
static void ngx_master_process_cycle(ngx_cycle_t *cycle, ngx_master_ctx_t *ctx)
|
||||
|
@ -744,6 +748,8 @@ int ngx_worker_thread_cycle(void *data)
|
|||
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
static ngx_int_t ngx_add_inherited_sockets(ngx_cycle_t *cycle, char **envp)
|
||||
{
|
||||
|
@ -791,7 +797,7 @@ static ngx_int_t ngx_add_inherited_sockets(ngx_cycle_t *cycle, char **envp)
|
|||
}
|
||||
|
||||
|
||||
static ngx_pid_t ngx_exec_new_binary(ngx_cycle_t *cycle, char *const *argv)
|
||||
ngx_pid_t ngx_exec_new_binary(ngx_cycle_t *cycle, char *const *argv)
|
||||
{
|
||||
char *env[2], *var, *p;
|
||||
ngx_int_t i;
|
||||
|
@ -885,8 +891,8 @@ static ngx_int_t ngx_core_module_init(ngx_cycle_t *cycle)
|
|||
ccf->daemon = NGX_CONF_UNSET;
|
||||
ccf->master = NGX_CONF_UNSET;
|
||||
ccf->worker_reopen = NGX_CONF_UNSET;
|
||||
ccf->user = (uid_t) NGX_CONF_UNSET;
|
||||
ccf->group = (gid_t) NGX_CONF_UNSET;
|
||||
ccf->user = (ngx_uid_t) NGX_CONF_UNSET;
|
||||
ccf->group = (ngx_gid_t) NGX_CONF_UNSET;
|
||||
|
||||
((void **)(cycle->conf_ctx))[ngx_core_module.index] = ccf;
|
||||
|
||||
|
@ -896,6 +902,15 @@ static ngx_int_t ngx_core_module_init(ngx_cycle_t *cycle)
|
|||
|
||||
static char *ngx_set_user(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
|
||||
{
|
||||
#if (WIN32)
|
||||
|
||||
ngx_conf_log_error(NGX_LOG_WARN, cf, 0,
|
||||
"\"user\" is not supported, ignored");
|
||||
|
||||
return NGX_CONF_OK;
|
||||
|
||||
#else
|
||||
|
||||
struct passwd *pwd;
|
||||
struct group *grp;
|
||||
ngx_str_t *value;
|
||||
|
@ -932,4 +947,6 @@ static char *ngx_set_user(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
|
|||
ccf->group = grp->gr_gid;
|
||||
|
||||
return NGX_CONF_OK;
|
||||
|
||||
#endif
|
||||
}
|
||||
|
|
|
@ -72,8 +72,8 @@ static ngx_inline uint32_t ngx_atomic_cmp_set(ngx_atomic_t *lock,
|
|||
typedef volatile uint32_t ngx_atomic_t;
|
||||
|
||||
/* STUB */
|
||||
#define ngx_atomic_inc(x) x++;
|
||||
#define ngx_atomic_dec(x) x--;
|
||||
#define ngx_atomic_inc(x) (*(x))++;
|
||||
#define ngx_atomic_dec(x) (*(x))--;
|
||||
#define ngx_atomic_cmp_set(lock, old, set) 1;
|
||||
/**/
|
||||
|
||||
|
|
|
@ -248,7 +248,12 @@ ngx_int_t ngx_connection_error(ngx_connection_t *c, ngx_err_t err, char *text)
|
|||
return 0;
|
||||
}
|
||||
|
||||
if (err == NGX_ECONNRESET || err == NGX_EPIPE || err == NGX_ENOTCONN) {
|
||||
if (err == NGX_ECONNRESET
|
||||
#if !(WIN32)
|
||||
|| err == NGX_EPIPE
|
||||
#endif
|
||||
|| err == NGX_ENOTCONN)
|
||||
{
|
||||
|
||||
switch (c->log_error) {
|
||||
|
||||
|
|
|
@ -21,6 +21,7 @@ typedef struct ngx_connection_s ngx_connection_t;
|
|||
#include <ngx_errno.h>
|
||||
#include <ngx_process.h>
|
||||
#include <ngx_thread.h>
|
||||
#include <ngx_user.h>
|
||||
#include <ngx_string.h>
|
||||
#include <ngx_parse.h>
|
||||
#include <ngx_log.h>
|
||||
|
@ -39,6 +40,7 @@ typedef struct ngx_connection_s ngx_connection_t;
|
|||
#include <ngx_times.h>
|
||||
#include <ngx_inet.h>
|
||||
#include <ngx_cycle.h>
|
||||
#include <ngx_process_cycle.h>
|
||||
#include <ngx_conf_file.h>
|
||||
#include <ngx_os.h>
|
||||
#include <ngx_connection.h>
|
||||
|
|
|
@ -24,7 +24,6 @@ static ngx_connection_t dumb;
|
|||
ngx_cycle_t *ngx_init_cycle(ngx_cycle_t *old_cycle)
|
||||
{
|
||||
ngx_int_t i, n, failed;
|
||||
ngx_str_t conf_file;
|
||||
ngx_log_t *log;
|
||||
ngx_conf_t conf;
|
||||
ngx_pool_t *pool;
|
||||
|
@ -227,13 +226,17 @@ ngx_cycle_t *ngx_init_cycle(ngx_cycle_t *old_cycle)
|
|||
}
|
||||
}
|
||||
|
||||
/* TODO: Win32 DuplicateHandle ? */
|
||||
if (dup2(cycle->log->file->fd, STDERR_FILENO) == -1) {
|
||||
#if (WIN32)
|
||||
/* TODO: TEST */
|
||||
CloseHandle(GetStdHandle(STD_ERROR_HANDLE));
|
||||
SetStdHandle(STD_ERROR_HANDLE, cycle->log->file->fd);
|
||||
#else
|
||||
if (dup2(cycle->log->file->fd, STDERR_FILENO) == NGX_ERROR) {
|
||||
ngx_log_error(NGX_LOG_EMERG, log, ngx_errno,
|
||||
"dup2(STDERR) failed");
|
||||
failed = 1;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
if (failed) {
|
||||
|
||||
|
@ -370,7 +373,7 @@ ngx_cycle_t *ngx_init_cycle(ngx_cycle_t *old_cycle)
|
|||
}
|
||||
|
||||
|
||||
void ngx_reopen_files(ngx_cycle_t *cycle, uid_t user)
|
||||
void ngx_reopen_files(ngx_cycle_t *cycle, ngx_uid_t user)
|
||||
{
|
||||
ngx_fd_t fd;
|
||||
ngx_int_t i;
|
||||
|
@ -395,19 +398,6 @@ void ngx_reopen_files(ngx_cycle_t *cycle, uid_t user)
|
|||
continue;
|
||||
}
|
||||
|
||||
if (user != (uid_t) -1) {
|
||||
if (chown(file[i].name.data, user, -1) == -1) {
|
||||
ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_errno,
|
||||
"chown \"%s\" failed", file[i].name.data);
|
||||
|
||||
if (ngx_close_file(fd) == NGX_FILE_ERROR) {
|
||||
ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_errno,
|
||||
ngx_close_file_n " \"%s\" failed",
|
||||
file[i].name.data);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#if (WIN32)
|
||||
if (ngx_file_append_mode(fd) == NGX_ERROR) {
|
||||
ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_errno,
|
||||
|
@ -423,6 +413,19 @@ void ngx_reopen_files(ngx_cycle_t *cycle, uid_t user)
|
|||
continue;
|
||||
}
|
||||
#else
|
||||
if (user != (ngx_uid_t) -1) {
|
||||
if (chown(file[i].name.data, user, -1) == -1) {
|
||||
ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_errno,
|
||||
"chown \"%s\" failed", file[i].name.data);
|
||||
|
||||
if (ngx_close_file(fd) == NGX_FILE_ERROR) {
|
||||
ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_errno,
|
||||
ngx_close_file_n " \"%s\" failed",
|
||||
file[i].name.data);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (fcntl(fd, F_SETFD, FD_CLOEXEC) == -1) {
|
||||
ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_errno,
|
||||
"fcntl(FD_CLOEXEC) \"%s\" failed",
|
||||
|
@ -447,11 +450,16 @@ void ngx_reopen_files(ngx_cycle_t *cycle, uid_t user)
|
|||
file[i].fd = fd;
|
||||
}
|
||||
|
||||
/* TODO: Win32 DuplicateHandle ? */
|
||||
#if (WIN32)
|
||||
/* TODO: TEST */
|
||||
CloseHandle(GetStdHandle(STD_ERROR_HANDLE));
|
||||
SetStdHandle(STD_ERROR_HANDLE, cycle->log->file->fd);
|
||||
#else
|
||||
if (dup2(cycle->log->file->fd, STDERR_FILENO) == -1) {
|
||||
ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_errno,
|
||||
"dup2(STDERR) failed");
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -25,12 +25,25 @@ struct ngx_cycle_s {
|
|||
};
|
||||
|
||||
|
||||
typedef struct {
|
||||
ngx_flag_t daemon;
|
||||
ngx_flag_t master;
|
||||
ngx_flag_t worker_reopen;
|
||||
ngx_uid_t user;
|
||||
ngx_gid_t group;
|
||||
ngx_str_t pid;
|
||||
ngx_str_t newpid;
|
||||
} ngx_core_conf_t;
|
||||
|
||||
|
||||
ngx_cycle_t *ngx_init_cycle(ngx_cycle_t *old_cycle);
|
||||
void ngx_reopen_files(ngx_cycle_t *cycle, uid_t user);
|
||||
void ngx_reopen_files(ngx_cycle_t *cycle, ngx_uid_t user);
|
||||
ngx_pid_t ngx_exec_new_binary(ngx_cycle_t *cycle, char *const *argv);
|
||||
|
||||
|
||||
extern volatile ngx_cycle_t *ngx_cycle;
|
||||
extern ngx_array_t ngx_old_cycles;
|
||||
extern ngx_module_t ngx_core_module;
|
||||
|
||||
|
||||
#endif /* _NGX_CYCLE_H_INCLUDED_ */
|
||||
|
|
|
@ -47,10 +47,10 @@ static const char *debug_levels[] = {
|
|||
|
||||
|
||||
#if (HAVE_VARIADIC_MACROS)
|
||||
void ngx_log_error_core(int level, ngx_log_t *log, ngx_err_t err,
|
||||
void ngx_log_error_core(ngx_uint_t level, ngx_log_t *log, ngx_err_t err,
|
||||
const char *fmt, ...)
|
||||
#else
|
||||
void ngx_log_error_core(int level, ngx_log_t *log, ngx_err_t err,
|
||||
void ngx_log_error_core(ngx_uint_t level, ngx_log_t *log, ngx_err_t err,
|
||||
const char *fmt, va_list args)
|
||||
#endif
|
||||
{
|
||||
|
@ -176,7 +176,7 @@ static void ngx_log_write(ngx_log_t *log, char *errstr, size_t len)
|
|||
|
||||
#if !(HAVE_VARIADIC_MACROS)
|
||||
|
||||
void ngx_log_error(int level, ngx_log_t *log, ngx_err_t err,
|
||||
void ngx_log_error(ngx_uint_t level, ngx_log_t *log, ngx_err_t err,
|
||||
const char *fmt, ...)
|
||||
{
|
||||
va_list args;
|
||||
|
|
|
@ -92,7 +92,7 @@ struct ngx_log_s {
|
|||
#define ngx_log_error(level, log, args...) \
|
||||
if (log->log_level >= level) ngx_log_error_core(level, log, args)
|
||||
|
||||
void ngx_log_error_core(int level, ngx_log_t *log, ngx_err_t err,
|
||||
void ngx_log_error_core(ngx_uint_t level, ngx_log_t *log, ngx_err_t err,
|
||||
const char *fmt, ...);
|
||||
|
||||
/*********************************/
|
||||
|
@ -104,7 +104,7 @@ void ngx_log_error_core(int level, ngx_log_t *log, ngx_err_t err,
|
|||
#define ngx_log_error(level, log, ...) \
|
||||
if (log->log_level >= level) ngx_log_error_core(level, log, __VA_ARGS__)
|
||||
|
||||
void ngx_log_error_core(int level, ngx_log_t *log, ngx_err_t err,
|
||||
void ngx_log_error_core(ngx_uint_t level, ngx_log_t *log, ngx_err_t err,
|
||||
const char *fmt, ...);
|
||||
|
||||
/*********************************/
|
||||
|
@ -113,9 +113,9 @@ void ngx_log_error_core(int level, ngx_log_t *log, ngx_err_t err,
|
|||
|
||||
#define HAVE_VARIADIC_MACROS 0
|
||||
|
||||
void ngx_log_error(int level, ngx_log_t *log, ngx_err_t err,
|
||||
void ngx_log_error(ngx_uint_t level, ngx_log_t *log, ngx_err_t err,
|
||||
const char *fmt, ...);
|
||||
void ngx_log_error_core(int level, ngx_log_t *log, ngx_err_t err,
|
||||
void ngx_log_error_core(ngx_uint_t level, ngx_log_t *log, ngx_err_t err,
|
||||
const char *fmt, va_list args);
|
||||
void ngx_log_debug_core(ngx_log_t *log, ngx_err_t err, const char *fmt, ...);
|
||||
void ngx_assert_core(ngx_log_t *log, const char *fmt, ...);
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
|
||||
/*
|
||||
* Copyright (C) 2002-2003 Igor Sysoev, http://sysoev.ru
|
||||
* Copyright (C) 2002-2004 Igor Sysoev, http://sysoev.ru/en/
|
||||
*/
|
||||
|
||||
|
||||
|
@ -10,11 +10,11 @@
|
|||
#include <ngx_iocp_module.h>
|
||||
|
||||
|
||||
static int ngx_iocp_init(ngx_cycle_t *cycle);
|
||||
static ngx_int_t ngx_iocp_init(ngx_cycle_t *cycle);
|
||||
static void ngx_iocp_done(ngx_cycle_t *cycle);
|
||||
static int ngx_iocp_add_event(ngx_event_t *ev, int event, u_int key);
|
||||
static int ngx_iocp_del_connection(ngx_connection_t *c, u_int flags);
|
||||
static int ngx_iocp_process_events(ngx_log_t *log);
|
||||
static ngx_int_t ngx_iocp_add_event(ngx_event_t *ev, int event, u_int key);
|
||||
static ngx_int_t ngx_iocp_del_connection(ngx_connection_t *c, u_int flags);
|
||||
static ngx_int_t ngx_iocp_process_events(ngx_log_t *log);
|
||||
static void *ngx_iocp_create_conf(ngx_cycle_t *cycle);
|
||||
static char *ngx_iocp_init_conf(ngx_cycle_t *cycle, void *conf);
|
||||
|
||||
|
@ -89,7 +89,7 @@ ngx_os_io_t ngx_iocp_io = {
|
|||
static HANDLE iocp;
|
||||
|
||||
|
||||
static int ngx_iocp_init(ngx_cycle_t *cycle)
|
||||
static ngx_int_t ngx_iocp_init(ngx_cycle_t *cycle)
|
||||
{
|
||||
ngx_iocp_conf_t *cf;
|
||||
|
||||
|
@ -106,10 +106,6 @@ static int ngx_iocp_init(ngx_cycle_t *cycle)
|
|||
return NGX_ERROR;
|
||||
}
|
||||
|
||||
if (ngx_event_timer_init(cycle) == NGX_ERROR) {
|
||||
return NGX_ERROR;
|
||||
}
|
||||
|
||||
ngx_io = ngx_iocp_io;
|
||||
|
||||
ngx_event_actions = ngx_iocp_module_ctx.actions;
|
||||
|
@ -128,12 +124,10 @@ static void ngx_iocp_done(ngx_cycle_t *cycle)
|
|||
}
|
||||
|
||||
iocp = NULL;
|
||||
|
||||
ngx_event_timer_done(cycle);
|
||||
}
|
||||
|
||||
|
||||
static int ngx_iocp_add_event(ngx_event_t *ev, int event, u_int key)
|
||||
static ngx_int_t ngx_iocp_add_event(ngx_event_t *ev, int event, u_int key)
|
||||
{
|
||||
ngx_connection_t *c;
|
||||
|
||||
|
@ -142,7 +136,8 @@ static int ngx_iocp_add_event(ngx_event_t *ev, int event, u_int key)
|
|||
c->read->active = 1;
|
||||
c->write->active = 1;
|
||||
|
||||
ngx_log_debug(ev->log, "iocp add: %d, %d:%08x" _ c->fd _ key _ &ev->ovlp);
|
||||
ngx_log_debug3(NGX_LOG_DEBUG_EVENT, ev->log, 0,
|
||||
"iocp add: fd:%d k:%d ov:" PTR_FMT, c->fd, key, &ev->ovlp);
|
||||
|
||||
if (CreateIoCompletionPort((HANDLE) c->fd, iocp, key, 0) == NULL) {
|
||||
ngx_log_error(NGX_LOG_ALERT, c->log, ngx_errno,
|
||||
|
@ -154,7 +149,7 @@ static int ngx_iocp_add_event(ngx_event_t *ev, int event, u_int key)
|
|||
}
|
||||
|
||||
|
||||
static int ngx_iocp_del_connection(ngx_connection_t *c, u_int flags)
|
||||
static ngx_int_t ngx_iocp_del_connection(ngx_connection_t *c, u_int flags)
|
||||
{
|
||||
if (CancelIo((HANDLE) c->fd) == 0) {
|
||||
ngx_log_error(NGX_LOG_ALERT, c->log, ngx_errno, "CancelIo() failed");
|
||||
|
@ -165,7 +160,7 @@ static int ngx_iocp_del_connection(ngx_connection_t *c, u_int flags)
|
|||
}
|
||||
|
||||
|
||||
static int ngx_iocp_process_events(ngx_log_t *log)
|
||||
static ngx_int_t ngx_iocp_process_events(ngx_log_t *log)
|
||||
{
|
||||
int rc;
|
||||
u_int key;
|
||||
|
@ -178,23 +173,17 @@ static int ngx_iocp_process_events(ngx_log_t *log)
|
|||
ngx_event_ovlp_t *ovlp;
|
||||
|
||||
timer = ngx_event_find_timer();
|
||||
ngx_old_elapsed_msec = ngx_elapsed_msec;
|
||||
|
||||
if (timer) {
|
||||
ngx_gettimeofday(&tv);
|
||||
delta = tv.tv_sec * 1000 + tv.tv_usec / 1000;
|
||||
|
||||
} else {
|
||||
if (timer == 0) {
|
||||
timer = INFINITE;
|
||||
delta = 0;
|
||||
}
|
||||
|
||||
ngx_log_debug(log, "iocp timer: %d" _ timer);
|
||||
ngx_log_debug1(NGX_LOG_DEBUG_EVENT, log, 0, "iocp timer: %d", timer);
|
||||
|
||||
rc = GetQueuedCompletionStatus(iocp, &bytes, (LPDWORD) &key,
|
||||
(LPOVERLAPPED *) &ovlp, timer);
|
||||
|
||||
ngx_log_debug(log, "iocp: %d, %d, %d:%08x" _ rc _ bytes _ key _ ovlp);
|
||||
|
||||
if (rc == 0) {
|
||||
err = ngx_errno;
|
||||
} else {
|
||||
|
@ -202,16 +191,13 @@ static int ngx_iocp_process_events(ngx_log_t *log)
|
|||
}
|
||||
|
||||
ngx_gettimeofday(&tv);
|
||||
ngx_time_update(tv.tv_sec);
|
||||
|
||||
if (ngx_cached_time != tv.tv_sec) {
|
||||
ngx_cached_time = tv.tv_sec;
|
||||
ngx_time_update();
|
||||
}
|
||||
ngx_log_debug4(NGX_LOG_DEBUG_EVENT, log, 0,
|
||||
"iocp: %d b:%d k:%d ov:" PTR_FMT, rc, bytes, key, ovlp);
|
||||
|
||||
if (timer != INFINITE) {
|
||||
delta = tv.tv_sec * 1000 + tv.tv_usec / 1000 - delta;
|
||||
ngx_event_expire_timers((ngx_msec_t) delta);
|
||||
}
|
||||
delta = ngx_elapsed_msec;
|
||||
ngx_elapsed_msec = tv.tv_sec * 1000 + tv.tv_usec / 1000 - ngx_start_msec;
|
||||
|
||||
if (err) {
|
||||
if (ovlp == NULL) {
|
||||
|
@ -227,12 +213,20 @@ static int ngx_iocp_process_events(ngx_log_t *log)
|
|||
}
|
||||
}
|
||||
|
||||
if (timer != INFINITE) {
|
||||
delta = ngx_elapsed_msec - delta;
|
||||
|
||||
ngx_log_debug2(NGX_LOG_DEBUG_EVENT, log, 0,
|
||||
"iocp timer: %d, delta: %d", timer, (int) delta);
|
||||
}
|
||||
|
||||
if (ovlp) {
|
||||
ev = ovlp->event;
|
||||
|
||||
ngx_log_debug(log, "iocp ev: %08x" _ ev);
|
||||
ngx_log_debug1(NGX_LOG_DEBUG_EVENT, log, 0, "iocp event:" PTR_FMT, ev);
|
||||
|
||||
switch (key) {
|
||||
|
||||
case NGX_IOCP_ACCEPT:
|
||||
if (bytes) {
|
||||
ev->ready = 1;
|
||||
|
@ -250,11 +244,16 @@ ngx_log_debug(log, "iocp ev: %08x" _ ev);
|
|||
|
||||
ev->available = bytes;
|
||||
|
||||
ngx_log_debug(log, "iocp ev handler: %08x" _ ev->event_handler);
|
||||
ngx_log_debug1(NGX_LOG_DEBUG_EVENT, log, 0,
|
||||
"iocp event handler: %08x" PTR_FMT, ev->event_handler);
|
||||
|
||||
ev->event_handler(ev);
|
||||
}
|
||||
|
||||
if (timer != INFINITE && delta) {
|
||||
ngx_event_expire_timers((ngx_msec_t) delta);
|
||||
}
|
||||
|
||||
return NGX_OK;
|
||||
}
|
||||
|
||||
|
|
|
@ -361,8 +361,12 @@ static int ngx_select_process_events(ngx_log_t *log)
|
|||
ngx_log_debug1(NGX_LOG_DEBUG_EVENT, log, 0, "select ready %d", ready);
|
||||
|
||||
if (err) {
|
||||
#if (WIN32)
|
||||
ngx_log_error(NGX_LOG_ALERT, log, err, "select() failed");
|
||||
#else
|
||||
ngx_log_error((err == NGX_EINTR) ? NGX_LOG_INFO : NGX_LOG_ALERT,
|
||||
log, err, "select() failed");
|
||||
#endif
|
||||
return NGX_ERROR;
|
||||
}
|
||||
|
||||
|
|
|
@ -70,7 +70,9 @@ int ngx_event_post_acceptex(ngx_listening_t *ls, int n)
|
|||
/* TODO: look up reused sockets */
|
||||
|
||||
s = ngx_socket(ls->family, ls->type, ls->protocol, ls->flags);
|
||||
ngx_log_debug(ls->log, ngx_socket_n ": %d:%d" _ s _ ls->flags);
|
||||
|
||||
ngx_log_debug2(NGX_LOG_DEBUG_EVENT, ls->log, 0,
|
||||
ngx_socket_n " s:%d fl:%d", s, ls->flags);
|
||||
|
||||
if (s == -1) {
|
||||
ngx_log_error(NGX_LOG_ALERT, ls->log, ngx_socket_errno,
|
||||
|
|
|
@ -21,6 +21,7 @@ typedef struct {
|
|||
|
||||
|
||||
typedef struct {
|
||||
int dummy;
|
||||
} ngx_http_ssi_command_t;
|
||||
|
||||
|
||||
|
|
|
@ -25,7 +25,7 @@ ssize_t ngx_aio_read(ngx_connection_t *c, char *buf, size_t size)
|
|||
rev = c->read;
|
||||
|
||||
if (!rev->ready) {
|
||||
ngx_log_error(NGX_LOG_ALERT, c->log, 0, "SECOND AIO POST");
|
||||
ngx_log_error(NGX_LOG_ALERT, c->log, 0, "second aio post");
|
||||
return NGX_AGAIN;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,10 +1,6 @@
|
|||
|
||||
#include <ngx_config.h>
|
||||
#include <ngx_core.h>
|
||||
#include <ngx_hunk.h>
|
||||
#include <ngx_array.h>
|
||||
#include <ngx_file.h>
|
||||
#include <ngx_files.h>
|
||||
|
||||
|
||||
ssize_t ngx_read_file(ngx_file_t *file, char *buf, size_t size, off_t offset)
|
||||
|
|
|
@ -3,11 +3,7 @@
|
|||
|
||||
|
||||
#include <ngx_config.h>
|
||||
|
||||
#include <ngx_types.h>
|
||||
#include <ngx_alloc.h>
|
||||
#include <ngx_hunk.h>
|
||||
#include <ngx_file.h>
|
||||
#include <ngx_core.h>
|
||||
|
||||
|
||||
#define NGX_INVALID_FILE -1
|
||||
|
|
|
@ -49,6 +49,8 @@ extern int ngx_max_sockets;
|
|||
extern int ngx_inherited_nonblocking;
|
||||
|
||||
|
||||
#if 0
|
||||
|
||||
extern ngx_int_t ngx_process;
|
||||
extern ngx_pid_t ngx_new_binary;
|
||||
|
||||
|
@ -62,6 +64,8 @@ extern ngx_int_t ngx_reconfigure;
|
|||
extern ngx_int_t ngx_reopen;
|
||||
extern ngx_int_t ngx_change_binary;
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef __FreeBSD__
|
||||
#include <ngx_freebsd.h>
|
||||
|
|
|
@ -29,10 +29,6 @@ typedef struct {
|
|||
} ngx_exec_ctx_t;
|
||||
|
||||
|
||||
#define NGX_PROCESS_SINGLE 0
|
||||
#define NGX_PROCESS_MASTER 1
|
||||
#define NGX_PROCESS_WORKER 2
|
||||
|
||||
#define NGX_MAX_PROCESSES 1024
|
||||
|
||||
#define NGX_PROCESS_NORESPAWN -1
|
||||
|
|
517
src/os/unix/ngx_process_cycle.c
Normal file
517
src/os/unix/ngx_process_cycle.c
Normal file
|
@ -0,0 +1,517 @@
|
|||
|
||||
#include <ngx_config.h>
|
||||
#include <ngx_core.h>
|
||||
#include <ngx_event.h>
|
||||
|
||||
|
||||
static void ngx_master_exit(ngx_cycle_t *cycle, ngx_master_ctx_t *ctx);
|
||||
static void ngx_worker_process_cycle(ngx_cycle_t *cycle, void *data);
|
||||
#if (NGX_THREADS)
|
||||
static int ngx_worker_thread_cycle(void *data);
|
||||
#endif
|
||||
|
||||
|
||||
ngx_int_t ngx_process;
|
||||
ngx_pid_t ngx_pid;
|
||||
ngx_pid_t ngx_new_binary;
|
||||
ngx_int_t ngx_inherited;
|
||||
|
||||
sig_atomic_t ngx_reap;
|
||||
sig_atomic_t ngx_timer;
|
||||
sig_atomic_t ngx_terminate;
|
||||
sig_atomic_t ngx_quit;
|
||||
sig_atomic_t ngx_noaccept;
|
||||
sig_atomic_t ngx_reconfigure;
|
||||
sig_atomic_t ngx_reopen;
|
||||
sig_atomic_t ngx_change_binary;
|
||||
|
||||
|
||||
/* TODO: broken NGX_PROCESS_SINGLE */
|
||||
|
||||
void ngx_master_process_cycle(ngx_cycle_t *cycle, ngx_master_ctx_t *ctx)
|
||||
{
|
||||
int signo;
|
||||
sigset_t set;
|
||||
struct timeval tv;
|
||||
struct itimerval itv;
|
||||
ngx_uint_t i, live;
|
||||
ngx_msec_t delay;
|
||||
ngx_core_conf_t *ccf;
|
||||
|
||||
sigemptyset(&set);
|
||||
sigaddset(&set, SIGCHLD);
|
||||
sigaddset(&set, SIGALRM);
|
||||
sigaddset(&set, SIGINT);
|
||||
sigaddset(&set, ngx_signal_value(NGX_RECONFIGURE_SIGNAL));
|
||||
sigaddset(&set, ngx_signal_value(NGX_REOPEN_SIGNAL));
|
||||
sigaddset(&set, ngx_signal_value(NGX_NOACCEPT_SIGNAL));
|
||||
sigaddset(&set, ngx_signal_value(NGX_TERMINATE_SIGNAL));
|
||||
sigaddset(&set, ngx_signal_value(NGX_SHUTDOWN_SIGNAL));
|
||||
sigaddset(&set, ngx_signal_value(NGX_CHANGEBIN_SIGNAL));
|
||||
|
||||
if (sigprocmask(SIG_BLOCK, &set, NULL) == -1) {
|
||||
ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
|
||||
"sigprocmask() failed");
|
||||
}
|
||||
|
||||
sigemptyset(&set);
|
||||
|
||||
ngx_setproctitle("master process");
|
||||
|
||||
ngx_new_binary = 0;
|
||||
delay = 0;
|
||||
signo = 0;
|
||||
live = 0;
|
||||
|
||||
for ( ;; ) {
|
||||
ngx_log_debug0(NGX_LOG_DEBUG_EVENT, cycle->log, 0, "new cycle");
|
||||
|
||||
if (ngx_process == NGX_PROCESS_MASTER) {
|
||||
ngx_spawn_process(cycle, ngx_worker_process_cycle, NULL,
|
||||
"worker process", NGX_PROCESS_RESPAWN);
|
||||
|
||||
/*
|
||||
* we have to limit the maximum life time of the worker processes
|
||||
* by 1 month because our millisecond event timer is limited
|
||||
* by 49 days on 32-bit platforms
|
||||
*/
|
||||
|
||||
itv.it_interval.tv_sec = 0;
|
||||
itv.it_interval.tv_usec = 0;
|
||||
itv.it_value.tv_sec = 30 * 24 * 60 * 60;
|
||||
itv.it_value.tv_usec = 0;
|
||||
|
||||
if (setitimer(ITIMER_REAL, &itv, NULL) == -1) {
|
||||
ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
|
||||
"setitimer() failed");
|
||||
}
|
||||
|
||||
live = 1;
|
||||
|
||||
} else {
|
||||
ngx_init_temp_number();
|
||||
|
||||
for (i = 0; ngx_modules[i]; i++) {
|
||||
if (ngx_modules[i]->init_process) {
|
||||
if (ngx_modules[i]->init_process(cycle) == NGX_ERROR) {
|
||||
/* fatal */
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ccf = (ngx_core_conf_t *) ngx_get_conf(cycle->conf_ctx,
|
||||
ngx_core_module);
|
||||
|
||||
/* a cycle with the same configuration because a new one is invalid */
|
||||
|
||||
for ( ;; ) {
|
||||
|
||||
/* an event loop */
|
||||
|
||||
for ( ;; ) {
|
||||
|
||||
if (ngx_process == NGX_PROCESS_MASTER) {
|
||||
if (delay) {
|
||||
delay *= 2;
|
||||
|
||||
ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
|
||||
"temination cycle: %d", delay);
|
||||
|
||||
itv.it_interval.tv_sec = 0;
|
||||
itv.it_interval.tv_usec = 0;
|
||||
itv.it_value.tv_sec = delay / 1000;
|
||||
itv.it_value.tv_usec = (delay % 1000 ) * 1000;
|
||||
|
||||
if (setitimer(ITIMER_REAL, &itv, NULL) == -1) {
|
||||
ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
|
||||
"setitimer() failed");
|
||||
}
|
||||
}
|
||||
|
||||
ngx_log_debug0(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
|
||||
"sigsuspend");
|
||||
|
||||
sigsuspend(&set);
|
||||
|
||||
ngx_gettimeofday(&tv);
|
||||
ngx_time_update(tv.tv_sec);
|
||||
|
||||
ngx_log_debug0(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
|
||||
"wake up");
|
||||
|
||||
} else { /* NGX_PROCESS_SINGLE */
|
||||
ngx_log_debug0(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
|
||||
"worker cycle");
|
||||
|
||||
ngx_process_events(cycle->log);
|
||||
live = 0;
|
||||
}
|
||||
|
||||
if (ngx_reap) {
|
||||
ngx_reap = 0;
|
||||
ngx_log_debug0(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
|
||||
"reap childs");
|
||||
|
||||
live = 0;
|
||||
for (i = 0; i < ngx_last_process; i++) {
|
||||
|
||||
ngx_log_debug5(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
|
||||
"child: " PID_T_FMT
|
||||
" e:%d t:%d d:%d r:%d",
|
||||
ngx_processes[i].pid,
|
||||
ngx_processes[i].exiting,
|
||||
ngx_processes[i].exited,
|
||||
ngx_processes[i].detached,
|
||||
ngx_processes[i].respawn);
|
||||
|
||||
if (ngx_processes[i].exited) {
|
||||
|
||||
if (ngx_processes[i].respawn
|
||||
&& !ngx_processes[i].exiting
|
||||
&& !ngx_terminate
|
||||
&& !ngx_quit)
|
||||
{
|
||||
if (ngx_spawn_process(cycle,
|
||||
ngx_processes[i].proc,
|
||||
ngx_processes[i].data,
|
||||
ngx_processes[i].name, i)
|
||||
== NGX_ERROR)
|
||||
{
|
||||
ngx_log_error(NGX_LOG_ALERT, cycle->log, 0,
|
||||
"can not respawn %s",
|
||||
ngx_processes[i].name);
|
||||
continue;
|
||||
}
|
||||
|
||||
live = 1;
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
if (ngx_processes[i].pid == ngx_new_binary) {
|
||||
ngx_new_binary = 0;
|
||||
|
||||
/* TODO: if (ngx_noaccept) ngx_configure = 1 */
|
||||
}
|
||||
|
||||
if (i != --ngx_last_process) {
|
||||
ngx_processes[i--] =
|
||||
ngx_processes[ngx_last_process];
|
||||
}
|
||||
|
||||
} else if (ngx_processes[i].exiting
|
||||
|| !ngx_processes[i].detached)
|
||||
{
|
||||
live = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!live && (ngx_terminate || ngx_quit)) {
|
||||
ngx_master_exit(cycle, ctx);
|
||||
}
|
||||
|
||||
if (ngx_terminate) {
|
||||
if (delay == 0) {
|
||||
delay = 50;
|
||||
}
|
||||
|
||||
if (delay > 1000) {
|
||||
signo = SIGKILL;
|
||||
} else {
|
||||
signo = ngx_signal_value(NGX_TERMINATE_SIGNAL);
|
||||
}
|
||||
|
||||
} else if (ngx_quit) {
|
||||
signo = ngx_signal_value(NGX_SHUTDOWN_SIGNAL);
|
||||
|
||||
} else if (ngx_timer) {
|
||||
signo = ngx_signal_value(NGX_SHUTDOWN_SIGNAL);
|
||||
|
||||
} else {
|
||||
|
||||
if (ngx_noaccept) {
|
||||
signo = ngx_signal_value(NGX_SHUTDOWN_SIGNAL);
|
||||
}
|
||||
|
||||
if (ngx_change_binary) {
|
||||
ngx_change_binary = 0;
|
||||
ngx_log_error(NGX_LOG_INFO, cycle->log, 0,
|
||||
"changing binary");
|
||||
ngx_new_binary = ngx_exec_new_binary(cycle, ctx->argv);
|
||||
}
|
||||
|
||||
if (ngx_reconfigure) {
|
||||
signo = ngx_signal_value(NGX_SHUTDOWN_SIGNAL);
|
||||
ngx_log_error(NGX_LOG_INFO, cycle->log, 0,
|
||||
"reconfiguring");
|
||||
}
|
||||
|
||||
if (ngx_reopen) {
|
||||
if (ngx_process == NGX_PROCESS_MASTER) {
|
||||
if (ccf->worker_reopen != 0) {
|
||||
signo = ngx_signal_value(NGX_REOPEN_SIGNAL);
|
||||
ngx_reopen = 0;
|
||||
|
||||
} else if (ngx_noaccept) {
|
||||
ngx_reopen = 0;
|
||||
|
||||
} else {
|
||||
signo = ngx_signal_value(NGX_SHUTDOWN_SIGNAL);
|
||||
}
|
||||
|
||||
} else { /* NGX_PROCESS_SINGLE */
|
||||
ngx_reopen = 0;
|
||||
}
|
||||
|
||||
ngx_log_error(NGX_LOG_INFO, cycle->log, 0,
|
||||
"reopening logs");
|
||||
ngx_reopen_files(cycle,
|
||||
ccf->worker_reopen != 0 ? ccf->user : (uid_t) -1);
|
||||
}
|
||||
}
|
||||
|
||||
if (signo) {
|
||||
for (i = 0; i < ngx_last_process; i++) {
|
||||
|
||||
if (ngx_processes[i].detached) {
|
||||
continue;
|
||||
}
|
||||
|
||||
ngx_log_debug2(NGX_LOG_DEBUG_CORE, cycle->log, 0,
|
||||
"kill (" PID_T_FMT ", %d)" ,
|
||||
ngx_processes[i].pid, signo);
|
||||
|
||||
if (kill(ngx_processes[i].pid, signo) == -1) {
|
||||
ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
|
||||
"kill(%d, %d) failed",
|
||||
ngx_processes[i].pid, signo);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (signo != ngx_signal_value(NGX_REOPEN_SIGNAL)) {
|
||||
ngx_processes[i].exiting = 1;
|
||||
}
|
||||
}
|
||||
|
||||
signo = 0;
|
||||
}
|
||||
|
||||
if (ngx_reopen || ngx_reconfigure || ngx_timer) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (ngx_reopen) {
|
||||
ngx_reopen = 0;
|
||||
|
||||
} else if (ngx_timer) {
|
||||
ngx_timer = 0;
|
||||
|
||||
} else if (ngx_noaccept) {
|
||||
ngx_noaccept = 0;
|
||||
ngx_reconfigure = 0;
|
||||
|
||||
} else {
|
||||
cycle = ngx_init_cycle(cycle);
|
||||
if (cycle == NULL) {
|
||||
cycle = (ngx_cycle_t *) ngx_cycle;
|
||||
continue;
|
||||
}
|
||||
|
||||
ngx_cycle = cycle;
|
||||
ngx_reconfigure = 0;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static void ngx_master_exit(ngx_cycle_t *cycle, ngx_master_ctx_t *ctx)
|
||||
{
|
||||
char *name;
|
||||
|
||||
if (ngx_inherited && getppid() > 1) {
|
||||
name = ctx->pid.name.data;
|
||||
|
||||
} else {
|
||||
name = ctx->name;
|
||||
}
|
||||
|
||||
if (ngx_delete_file(name) == NGX_FILE_ERROR) {
|
||||
ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
|
||||
ngx_delete_file_n " \"%s\" failed", name);
|
||||
}
|
||||
|
||||
ngx_log_error(NGX_LOG_INFO, cycle->log, 0, "exit");
|
||||
exit(0);
|
||||
}
|
||||
|
||||
|
||||
static void ngx_worker_process_cycle(ngx_cycle_t *cycle, void *data)
|
||||
{
|
||||
sigset_t set;
|
||||
ngx_int_t i;
|
||||
ngx_listening_t *ls;
|
||||
ngx_core_conf_t *ccf;
|
||||
#if (NGX_THREADS)
|
||||
ngx_tid_t tid;
|
||||
#endif
|
||||
|
||||
ngx_process = NGX_PROCESS_WORKER;
|
||||
ngx_last_process = 0;
|
||||
|
||||
ccf = (ngx_core_conf_t *) ngx_get_conf(cycle->conf_ctx, ngx_core_module);
|
||||
|
||||
if (ccf->group != (gid_t) NGX_CONF_UNSET) {
|
||||
if (setuid(ccf->group) == -1) {
|
||||
ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_errno,
|
||||
"setgid(%d) failed", ccf->group);
|
||||
/* fatal */
|
||||
exit(2);
|
||||
}
|
||||
}
|
||||
|
||||
if (ccf->user != (uid_t) NGX_CONF_UNSET && geteuid() == 0) {
|
||||
if (setuid(ccf->user) == -1) {
|
||||
ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_errno,
|
||||
"setuid(%d) failed", ccf->user);
|
||||
/* fatal */
|
||||
exit(2);
|
||||
}
|
||||
}
|
||||
|
||||
#if (HAVE_PR_SET_DUMPABLE)
|
||||
|
||||
/* allow coredump after setuid() in Linux 2.4.x */
|
||||
|
||||
if (prctl(PR_SET_DUMPABLE, 1, 0, 0, 0) == -1) {
|
||||
ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
|
||||
"prctl(PR_SET_DUMPABLE) failed");
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
sigemptyset(&set);
|
||||
|
||||
if (sigprocmask(SIG_SETMASK, &set, NULL) == -1) {
|
||||
ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
|
||||
"sigprocmask() failed");
|
||||
}
|
||||
|
||||
ngx_init_temp_number();
|
||||
|
||||
/*
|
||||
* disable deleting previous events for the listening sockets because
|
||||
* in the worker processes there are no events at all at this point
|
||||
*/
|
||||
ls = cycle->listening.elts;
|
||||
for (i = 0; i < cycle->listening.nelts; i++) {
|
||||
ls[i].remain = 0;
|
||||
}
|
||||
|
||||
for (i = 0; ngx_modules[i]; i++) {
|
||||
if (ngx_modules[i]->init_process) {
|
||||
if (ngx_modules[i]->init_process(cycle) == NGX_ERROR) {
|
||||
/* fatal */
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ngx_setproctitle("worker process");
|
||||
|
||||
#if (NGX_THREADS)
|
||||
|
||||
if (ngx_init_threads(5, 128 * 1024 * 1024, cycle) == NGX_ERROR) {
|
||||
/* fatal */
|
||||
exit(1);
|
||||
}
|
||||
|
||||
for (i = 0; i < 1; i++) {
|
||||
if (ngx_create_thread(&tid, ngx_worker_thread_cycle,
|
||||
cycle, cycle->log) != 0)
|
||||
{
|
||||
/* fatal */
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
for ( ;; ) {
|
||||
ngx_log_debug0(NGX_LOG_DEBUG_EVENT, cycle->log, 0, "worker cycle");
|
||||
|
||||
ngx_process_events(cycle->log);
|
||||
|
||||
if (ngx_terminate) {
|
||||
ngx_log_error(NGX_LOG_INFO, cycle->log, 0, "exiting");
|
||||
exit(0);
|
||||
}
|
||||
|
||||
if (ngx_quit) {
|
||||
ngx_log_error(NGX_LOG_INFO, cycle->log, 0,
|
||||
"gracefully shutting down");
|
||||
ngx_setproctitle("worker process is shutting down");
|
||||
break;
|
||||
}
|
||||
|
||||
if (ngx_reopen) {
|
||||
ngx_log_error(NGX_LOG_INFO, cycle->log, 0, "reopen logs");
|
||||
ngx_reopen_files(cycle, -1);
|
||||
ngx_reopen = 0;
|
||||
}
|
||||
}
|
||||
|
||||
ngx_close_listening_sockets(cycle);
|
||||
|
||||
for ( ;; ) {
|
||||
if (ngx_event_timer_rbtree == &ngx_event_timer_sentinel) {
|
||||
ngx_log_error(NGX_LOG_INFO, cycle->log, 0, "exiting");
|
||||
exit(0);
|
||||
}
|
||||
|
||||
ngx_log_debug0(NGX_LOG_DEBUG_EVENT, cycle->log, 0, "worker cycle");
|
||||
|
||||
ngx_process_events(cycle->log);
|
||||
|
||||
if (ngx_reopen) {
|
||||
ngx_log_error(NGX_LOG_INFO, cycle->log, 0, "reopen logs");
|
||||
ngx_reopen_files(cycle, -1);
|
||||
ngx_reopen = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#if (NGX_THREADS)
|
||||
|
||||
int ngx_worker_thread_cycle(void *data)
|
||||
{
|
||||
ngx_cycle_t *cycle = data;
|
||||
|
||||
struct timeval tv;
|
||||
|
||||
/* STUB */
|
||||
|
||||
ngx_log_debug1(NGX_LOG_DEBUG_CORE, ngx_cycle->log, ngx_errno,
|
||||
"thread %d started", ngx_thread_self());
|
||||
|
||||
ngx_setproctitle("worker thread");
|
||||
|
||||
sleep(5);
|
||||
|
||||
ngx_gettimeofday(&tv);
|
||||
ngx_time_update(tv.tv_sec);
|
||||
|
||||
ngx_log_debug1(NGX_LOG_DEBUG_CORE, ngx_cycle->log, ngx_errno,
|
||||
"thread %d done", ngx_thread_self());
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
#endif
|
40
src/os/unix/ngx_process_cycle.h
Normal file
40
src/os/unix/ngx_process_cycle.h
Normal file
|
@ -0,0 +1,40 @@
|
|||
#ifndef _NGX_PROCESS_CYCLE_H_INCLUDED_
|
||||
#define _NGX_PROCESS_CYCLE_H_INCLUDED_
|
||||
|
||||
|
||||
#include <ngx_config.h>
|
||||
#include <ngx_core.h>
|
||||
|
||||
|
||||
typedef struct {
|
||||
ngx_file_t pid;
|
||||
char *name;
|
||||
int argc;
|
||||
char *const *argv;
|
||||
} ngx_master_ctx_t;
|
||||
|
||||
|
||||
#define NGX_PROCESS_SINGLE 0
|
||||
#define NGX_PROCESS_MASTER 1
|
||||
#define NGX_PROCESS_WORKER 2
|
||||
|
||||
|
||||
void ngx_master_process_cycle(ngx_cycle_t *cycle, ngx_master_ctx_t *ctx);
|
||||
|
||||
|
||||
extern ngx_int_t ngx_process;
|
||||
extern ngx_pid_t ngx_pid;
|
||||
extern ngx_pid_t ngx_new_binary;
|
||||
extern ngx_int_t ngx_inherited;
|
||||
|
||||
extern sig_atomic_t ngx_reap;
|
||||
extern sig_atomic_t ngx_timer;
|
||||
extern sig_atomic_t ngx_quit;
|
||||
extern sig_atomic_t ngx_terminate;
|
||||
extern sig_atomic_t ngx_noaccept;
|
||||
extern sig_atomic_t ngx_reconfigure;
|
||||
extern sig_atomic_t ngx_reopen;
|
||||
extern sig_atomic_t ngx_change_binary;
|
||||
|
||||
|
||||
#endif /* _NGX_PROCESS_CYCLE_H_INCLUDED_ */
|
13
src/os/unix/ngx_user.h
Normal file
13
src/os/unix/ngx_user.h
Normal file
|
@ -0,0 +1,13 @@
|
|||
#ifndef _NGX_USER_H_INCLUDED_
|
||||
#define _NGX_USER_H_INCLUDED_
|
||||
|
||||
|
||||
#include <ngx_config.h>
|
||||
#include <ngx_core.h>
|
||||
|
||||
|
||||
typedef uid_t ngx_uid_t;
|
||||
typedef gid_t ngx_gid_t;
|
||||
|
||||
|
||||
#endif /* _NGX_USER_H_INCLUDED_ */
|
|
@ -17,10 +17,13 @@ typedef DWORD ngx_err_t;
|
|||
#define NGX_EACCES ERROR_ACCESS_DENIED
|
||||
#define NGX_EEXIST ERROR_FILE_EXISTS
|
||||
#define NGX_ENOTDIR ERROR_PATH_NOT_FOUND
|
||||
#define NGX_EPIPE EPIPE
|
||||
#define NGX_EAGAIN WSAEWOULDBLOCK
|
||||
#define NGX_EINPROGRESS WSAEINPROGRESS
|
||||
#define NGX_EADDRINUSE WSAEADDRINUSE
|
||||
#define NGX_ECONNRESET ECONNRESET
|
||||
#define NGX_ECONNABORTED WSAECONNABORTED
|
||||
#define NGX_ECONNRESET WSAECONNRESET
|
||||
#define NGX_ENOTCONN WSAENOTCONN
|
||||
#define NGX_ETIMEDOUT WSAETIMEDOUT
|
||||
#define NGX_ENOMOREFILES ERROR_NO_MORE_FILES
|
||||
|
||||
|
|
|
@ -21,8 +21,6 @@
|
|||
#define NGX_FILE_ERROR 0
|
||||
|
||||
|
||||
#define STDERR_FILENO (HANDLE) 2
|
||||
|
||||
|
||||
#define ngx_open_file(name, access, create) \
|
||||
CreateFile(name, access, \
|
||||
|
|
|
@ -46,8 +46,13 @@ extern int ngx_inherited_nonblocking;
|
|||
extern int ngx_win32_version;
|
||||
|
||||
|
||||
extern int reconfigure;
|
||||
extern int reopen;
|
||||
extern ngx_int_t ngx_process;
|
||||
|
||||
extern ngx_int_t ngx_quit;
|
||||
extern ngx_int_t ngx_terminate;
|
||||
|
||||
extern ngx_int_t ngx_reconfigure;
|
||||
extern ngx_int_t ngx_reopen;
|
||||
|
||||
|
||||
|
||||
|
|
9
src/os/win32/ngx_process.c
Normal file
9
src/os/win32/ngx_process.c
Normal file
|
@ -0,0 +1,9 @@
|
|||
|
||||
#include <ngx_config.h>
|
||||
#include <ngx_core.h>
|
||||
|
||||
|
||||
ngx_pid_t ngx_exec(ngx_cycle_t *cycle, ngx_exec_ctx_t *ctx)
|
||||
{
|
||||
return /* STUB */ 0;
|
||||
}
|
|
@ -2,7 +2,29 @@
|
|||
#define _NGX_PROCESS_H_INCLUDED_
|
||||
|
||||
|
||||
#define ngx_getpid GetCurrentProcessId
|
||||
typedef DWORD ngx_pid_t;
|
||||
|
||||
#define ngx_getpid GetCurrentProcessId
|
||||
#define ngx_log_pid ngx_pid
|
||||
|
||||
|
||||
typedef struct {
|
||||
char *path;
|
||||
char *name;
|
||||
char *const *argv;
|
||||
char *const *envp;
|
||||
} ngx_exec_ctx_t;
|
||||
|
||||
|
||||
#define NGX_PROCESS_SINGLE 0
|
||||
#define NGX_PROCESS_MASTER 1
|
||||
#define NGX_PROCESS_WORKER 2
|
||||
|
||||
|
||||
ngx_pid_t ngx_exec(ngx_cycle_t *cycle, ngx_exec_ctx_t *ctx);
|
||||
|
||||
|
||||
extern ngx_pid_t ngx_pid;
|
||||
|
||||
|
||||
#endif /* _NGX_PROCESS_H_INCLUDED_ */
|
||||
|
|
28
src/os/win32/ngx_process_cycle.c
Normal file
28
src/os/win32/ngx_process_cycle.c
Normal file
|
@ -0,0 +1,28 @@
|
|||
|
||||
#include <ngx_config.h>
|
||||
#include <ngx_core.h>
|
||||
#include <ngx_event.h>
|
||||
|
||||
|
||||
#if 0
|
||||
|
||||
ngx_int_t ngx_process;
|
||||
ngx_pid_t ngx_pid;
|
||||
ngx_pid_t ngx_new_binary;
|
||||
ngx_int_t ngx_inherited;
|
||||
|
||||
sig_atomic_t ngx_reap;
|
||||
sig_atomic_t ngx_timer;
|
||||
sig_atomic_t ngx_terminate;
|
||||
sig_atomic_t ngx_quit;
|
||||
sig_atomic_t ngx_noaccept;
|
||||
sig_atomic_t ngx_reconfigure;
|
||||
sig_atomic_t ngx_reopen;
|
||||
sig_atomic_t ngx_change_binary;
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
void ngx_master_process_cycle(ngx_cycle_t *cycle, ngx_master_ctx_t *ctx)
|
||||
{
|
||||
}
|
40
src/os/win32/ngx_process_cycle.h
Normal file
40
src/os/win32/ngx_process_cycle.h
Normal file
|
@ -0,0 +1,40 @@
|
|||
#ifndef _NGX_PROCESS_CYCLE_H_INCLUDED_
|
||||
#define _NGX_PROCESS_CYCLE_H_INCLUDED_
|
||||
|
||||
|
||||
#include <ngx_config.h>
|
||||
#include <ngx_core.h>
|
||||
|
||||
|
||||
typedef struct {
|
||||
ngx_file_t pid;
|
||||
char *name;
|
||||
int argc;
|
||||
char *const *argv;
|
||||
} ngx_master_ctx_t;
|
||||
|
||||
|
||||
#define NGX_PROCESS_SINGLE 0
|
||||
#define NGX_PROCESS_MASTER 1
|
||||
#define NGX_PROCESS_WORKER 2
|
||||
|
||||
|
||||
void ngx_master_process_cycle(ngx_cycle_t *cycle, ngx_master_ctx_t *ctx);
|
||||
|
||||
|
||||
extern ngx_int_t ngx_process;
|
||||
extern ngx_pid_t ngx_pid;
|
||||
extern ngx_pid_t ngx_new_binary;
|
||||
extern ngx_int_t ngx_inherited;
|
||||
|
||||
extern sig_atomic_t ngx_reap;
|
||||
extern sig_atomic_t ngx_timer;
|
||||
extern sig_atomic_t ngx_quit;
|
||||
extern sig_atomic_t ngx_terminate;
|
||||
extern sig_atomic_t ngx_noaccept;
|
||||
extern sig_atomic_t ngx_reconfigure;
|
||||
extern sig_atomic_t ngx_reopen;
|
||||
extern sig_atomic_t ngx_change_binary;
|
||||
|
||||
|
||||
#endif /* _NGX_PROCESS_CYCLE_H_INCLUDED_ */
|
26
src/os/win32/ngx_thread.h
Normal file
26
src/os/win32/ngx_thread.h
Normal file
|
@ -0,0 +1,26 @@
|
|||
#ifndef _NGX_THREAD_H_INCLUDED_
|
||||
#define _NGX_THREAD_H_INCLUDED_
|
||||
|
||||
|
||||
#include <ngx_config.h>
|
||||
#include <ngx_core.h>
|
||||
|
||||
|
||||
#if (NGX_THREADS)
|
||||
|
||||
#define ngx_thread_volatile volatile
|
||||
|
||||
#else /* !NGX_THREADS */
|
||||
|
||||
#define ngx_thread_volatile
|
||||
|
||||
#define ngx_log_tid 0
|
||||
#define TID_T_FMT "%d"
|
||||
|
||||
#define ngx_mutex_lock(m) NGX_OK
|
||||
#define ngx_mutex_unlock(m)
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
#endif /* _NGX_THREAD_H_INCLUDED_ */
|
14
src/os/win32/ngx_user.h
Normal file
14
src/os/win32/ngx_user.h
Normal file
|
@ -0,0 +1,14 @@
|
|||
#ifndef _NGX_USER_H_INCLUDED_
|
||||
#define _NGX_USER_H_INCLUDED_
|
||||
|
||||
|
||||
#include <ngx_config.h>
|
||||
#include <ngx_core.h>
|
||||
|
||||
|
||||
/* STUB */
|
||||
#define ngx_uid_t ngx_int_t
|
||||
#define ngx_gid_t ngx_int_t
|
||||
|
||||
|
||||
#endif /* _NGX_USER_H_INCLUDED_ */
|
|
@ -4,8 +4,6 @@
|
|||
|
||||
#define WIN32 1
|
||||
|
||||
#define NGX_WIN_NT 200000
|
||||
|
||||
#define STRICT
|
||||
#define WIN32_LEAN_AND_MEAN
|
||||
|
||||
|
@ -36,16 +34,19 @@
|
|||
#pragma warning(disable:4127)
|
||||
#endif
|
||||
|
||||
#include <ngx_auto_config.h>
|
||||
|
||||
|
||||
#define ngx_inline __inline
|
||||
|
||||
|
||||
#if 0
|
||||
/* owc have not __int32 */
|
||||
#if 1
|
||||
typedef unsigned __int32 uint32_t;
|
||||
#else
|
||||
/* OWC has not __int32 */
|
||||
typedef unsigned int uint32_t;
|
||||
#endif
|
||||
|
||||
typedef __int64 int64_t;
|
||||
typedef unsigned __int64 uint64_t;
|
||||
typedef u_int uintptr_t;
|
||||
|
@ -54,6 +55,7 @@ typedef int ssize_t;
|
|||
typedef long time_t;
|
||||
typedef __int64 off_t;
|
||||
typedef uint32_t in_addr_t;
|
||||
typedef int sig_atomic_t;
|
||||
|
||||
|
||||
#define OFF_T_FMT "%I64d"
|
||||
|
@ -61,8 +63,11 @@ typedef uint32_t in_addr_t;
|
|||
#define SIZE_T_X_FMT "%x"
|
||||
#define PID_T_FMT "%d"
|
||||
#define TIME_T_FMT "%lu"
|
||||
#define PTR_FMT "%08X"
|
||||
|
||||
|
||||
#define NGX_WIN_NT 200000
|
||||
|
||||
|
||||
#ifndef HAVE_INHERITED_NONBLOCK
|
||||
#define HAVE_INHERITED_NONBLOCK 1
|
||||
|
|
|
@ -20,7 +20,8 @@ ssize_t ngx_wsarecv(ngx_connection_t *c, char *buf, size_t size)
|
|||
|
||||
rc = WSARecv(c->fd, wsabuf, 1, &bytes, &flags, NULL, NULL);
|
||||
|
||||
ngx_log_debug(c->log, "WSARecv: %d:%d" _ rc _ bytes);
|
||||
ngx_log_debug4(NGX_LOG_DEBUG_EVENT, c->log, 0,
|
||||
"WSARecv: fd:%d rc:%d %d of %d", c->fd, rc, bytes, size);
|
||||
|
||||
rev = c->read;
|
||||
|
||||
|
@ -29,12 +30,14 @@ ssize_t ngx_wsarecv(ngx_connection_t *c, char *buf, size_t size)
|
|||
err = ngx_socket_errno;
|
||||
|
||||
if (err == WSAEWOULDBLOCK) {
|
||||
ngx_log_error(NGX_LOG_INFO, c->log, err, "WSARecv() EAGAIN");
|
||||
ngx_log_debug0(NGX_LOG_DEBUG_EVENT, c->log, err,
|
||||
"WSARecv() not ready");
|
||||
return NGX_AGAIN;
|
||||
}
|
||||
|
||||
rev->error = 1;
|
||||
ngx_log_error(NGX_LOG_CRIT, c->log, err, "WSARecv() failed");
|
||||
ngx_connection_error(c, err, "WSARecv() failed");
|
||||
|
||||
return NGX_ERROR;
|
||||
}
|
||||
|
||||
|
@ -63,19 +66,19 @@ ssize_t ngx_overlapped_wsarecv(ngx_connection_t *c, char *buf, size_t size)
|
|||
rev = c->read;
|
||||
|
||||
if (!rev->ready) {
|
||||
ngx_log_error(NGX_LOG_ALERT, rev->log, 0, "SECOND WSA POST");
|
||||
ngx_log_error(NGX_LOG_ALERT, rev->log, 0, "second wsa post");
|
||||
return NGX_AGAIN;
|
||||
}
|
||||
|
||||
ngx_log_debug(c->log, "rev->complete: %d" _ rev->complete);
|
||||
ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, 0,
|
||||
"rev->complete: %d", rev->complete);
|
||||
|
||||
if (rev->complete) {
|
||||
rev->complete = 0;
|
||||
|
||||
if (ngx_event_flags & NGX_USE_IOCP_EVENT) {
|
||||
if (rev->ovlp.error) {
|
||||
ngx_log_error(NGX_LOG_ERR, c->log, rev->ovlp.error,
|
||||
"WSARecv() failed");
|
||||
ngx_connection_error(c, rev->ovlp.error, "WSARecv() failed");
|
||||
return NGX_ERROR;
|
||||
}
|
||||
|
||||
|
@ -84,9 +87,8 @@ ssize_t ngx_overlapped_wsarecv(ngx_connection_t *c, char *buf, size_t size)
|
|||
|
||||
if (WSAGetOverlappedResult(c->fd, (LPWSAOVERLAPPED) &rev->ovlp,
|
||||
&bytes, 0, NULL) == 0) {
|
||||
ngx_log_error(NGX_LOG_CRIT, c->log, ngx_socket_errno,
|
||||
"WSARecv() or WSAGetOverlappedResult() failed");
|
||||
|
||||
ngx_connection_error(c, ngx_socket_errno,
|
||||
"WSARecv() or WSAGetOverlappedResult() failed");
|
||||
return NGX_ERROR;
|
||||
}
|
||||
|
||||
|
@ -104,7 +106,8 @@ ssize_t ngx_overlapped_wsarecv(ngx_connection_t *c, char *buf, size_t size)
|
|||
|
||||
rev->complete = 0;
|
||||
|
||||
ngx_log_debug(c->log, "WSARecv: %d:%d" _ rc _ bytes);
|
||||
ngx_log_debug4(NGX_LOG_DEBUG_EVENT, c->log, 0,
|
||||
"WSARecv: fd:%d rc:%d %d of %d", c->fd, rc, bytes, size);
|
||||
|
||||
if (rc == -1) {
|
||||
err = ngx_socket_errno;
|
||||
|
@ -114,7 +117,7 @@ ssize_t ngx_overlapped_wsarecv(ngx_connection_t *c, char *buf, size_t size)
|
|||
}
|
||||
|
||||
rev->error = 1;
|
||||
ngx_log_error(NGX_LOG_CRIT, c->log, err, "WSARecv() failed");
|
||||
ngx_connection_error(c, err, "WSARecv() failed");
|
||||
return NGX_ERROR;
|
||||
}
|
||||
|
||||
|
|
|
@ -40,7 +40,9 @@ ssize_t ngx_wsarecv_chain(ngx_connection_t *c, ngx_chain_t *chain)
|
|||
chain = chain->next;
|
||||
}
|
||||
|
||||
ngx_log_debug(c->log, "WSARecv: %d:%d" _ io.nelts _ wsabuf->len);
|
||||
ngx_log_debug2(NGX_LOG_DEBUG_EVENT, c->log, 0,
|
||||
"WSARecv: %d:%d", io.nelts, wsabuf->len);
|
||||
|
||||
|
||||
rc = WSARecv(c->fd, io.elts, io.nelts, &bytes, &flags, NULL, NULL);
|
||||
|
||||
|
@ -51,12 +53,13 @@ ngx_log_debug(c->log, "WSARecv: %d:%d" _ io.nelts _ wsabuf->len);
|
|||
err = ngx_socket_errno;
|
||||
|
||||
if (err == WSAEWOULDBLOCK) {
|
||||
ngx_log_error(NGX_LOG_INFO, c->log, err, "WSARecv() EAGAIN");
|
||||
ngx_log_debug0(NGX_LOG_DEBUG_EVENT, c->log, err,
|
||||
"WSARecv() not ready");
|
||||
return NGX_AGAIN;
|
||||
}
|
||||
|
||||
rev->error = 1;
|
||||
ngx_log_error(NGX_LOG_CRIT, c->log, err, "WSARecv() failed");
|
||||
ngx_connection_error(c, err, "WSARecv() failed");
|
||||
return NGX_ERROR;
|
||||
}
|
||||
|
||||
|
|
|
@ -53,18 +53,19 @@ ngx_chain_t *ngx_wsasend_chain(ngx_connection_t *c, ngx_chain_t *in)
|
|||
err = ngx_errno;
|
||||
|
||||
if (err == WSAEWOULDBLOCK) {
|
||||
ngx_log_error(NGX_LOG_INFO, c->log, err, "WSASend() EAGAIN");
|
||||
ngx_log_debug0(NGX_LOG_DEBUG_EVENT, c->log, err,
|
||||
"WSASend() not ready");
|
||||
wev->ready = 0;
|
||||
return in;
|
||||
|
||||
} else {
|
||||
wev->error = 1;
|
||||
ngx_log_error(NGX_LOG_CRIT, c->log, err, "WSASend() failed");
|
||||
ngx_connection_error(c, err, "WSASend() failed");
|
||||
return NGX_CHAIN_ERROR;
|
||||
}
|
||||
}
|
||||
|
||||
ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, 0, "WSASend(): %d", sent);
|
||||
ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, 0, "WSASend: %d", sent);
|
||||
|
||||
c->sent += sent;
|
||||
|
||||
|
@ -162,7 +163,7 @@ ngx_chain_t *ngx_overlapped_wsasend_chain(ngx_connection_t *c, ngx_chain_t *in)
|
|||
|
||||
} else {
|
||||
wev->error = 1;
|
||||
ngx_log_error(NGX_LOG_CRIT, c->log, err, "WSASend() failed");
|
||||
ngx_connection_error(c, err, "WSASend() failed");
|
||||
return NGX_CHAIN_ERROR;
|
||||
}
|
||||
|
||||
|
@ -187,8 +188,7 @@ ngx_chain_t *ngx_overlapped_wsasend_chain(ngx_connection_t *c, ngx_chain_t *in)
|
|||
|
||||
if (ngx_event_flags & NGX_USE_IOCP_EVENT) {
|
||||
if (wev->ovlp.error) {
|
||||
ngx_log_error(NGX_LOG_ERR, c->log, wev->ovlp.error,
|
||||
"WSASend() failed");
|
||||
ngx_connection_error(c, wev->ovlp.error, "WSASend() failed");
|
||||
return NGX_CHAIN_ERROR;
|
||||
}
|
||||
|
||||
|
@ -197,15 +197,15 @@ ngx_chain_t *ngx_overlapped_wsasend_chain(ngx_connection_t *c, ngx_chain_t *in)
|
|||
} else {
|
||||
if (WSAGetOverlappedResult(c->fd, (LPWSAOVERLAPPED) &wev->ovlp,
|
||||
&sent, 0, NULL) == 0) {
|
||||
ngx_log_error(NGX_LOG_CRIT, c->log, ngx_socket_errno,
|
||||
"WSASend() or WSAGetOverlappedResult() failed");
|
||||
ngx_connection_error(c, ngx_socket_errno,
|
||||
"WSASend() or WSAGetOverlappedResult() failed");
|
||||
|
||||
return NGX_CHAIN_ERROR;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, 0, "WSASend(): %d", sent);
|
||||
ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, 0, "WSASend: %d", sent);
|
||||
|
||||
c->sent += sent;
|
||||
|
||||
|
|
Loading…
Reference in a new issue