nginx-0.0.1-2002-08-26-19:18:19 import
diff --git a/src/core/nginx.c b/src/core/nginx.c
index bf73782..748b443 100644
--- a/src/core/nginx.c
+++ b/src/core/nginx.c
@@ -85,43 +85,57 @@
/* for each listening socket */
ls = (ngx_listen_t *) ngx_listening_sockets->elts;
for (i = 0; i < ngx_listening_sockets->nelts; i++) {
+
if (ls[i].done)
continue;
-#if (WIN32)
- s = WSASocket(ls[i].family, ls[i].type, ls[i].protocol, NULL, 0, 0);
-#else
- s = socket(ls[i].family, ls[i].type, ls[i].protocol);
-#endif
- if (s == -1)
+ if (ls[i].inherited) {
+
+ /* TODO: close on exit */
+ /* TODO: nonblocking */
+ /* TODO: deferred accept */
+
+ ls[i].done = 1;
+ continue;
+ }
+
+ s = ngx_socket(ls[i].family, ls[i].type, ls[i].protocol,
+ ls[i].flags);
+ if (s == -1) {
ngx_log_error(NGX_LOG_EMERG, log, ngx_socket_errno,
- "nginx: socket %s falied", ls[i].addr_text);
+ ngx_socket_n " %s falied", ls[i].addr_text);
+ exit(1);
+ }
if (setsockopt(s, SOL_SOCKET, SO_REUSEADDR,
- (const void *) &reuseaddr, sizeof(int)) == -1)
+ (const void *) &reuseaddr, sizeof(int)) == -1) {
ngx_log_error(NGX_LOG_EMERG, log, ngx_socket_errno,
- "nginx: setsockopt (SO_REUSEADDR) %s failed",
+ "setsockopt(SO_REUSEADDR) %s failed",
ls[i].addr_text);
+ exit(1);
+ }
/* TODO: close on exit */
if (ls[i].nonblocking) {
- if (ngx_nonblocking(s) == -1)
+ if (ngx_nonblocking(s) == -1) {
ngx_log_error(NGX_LOG_EMERG, log, ngx_socket_errno,
ngx_nonblocking_n " %s failed",
ls[i].addr_text);
+ exit(1);
+ }
}
- if (bind(s, (struct sockaddr *) ls[i].addr, ls[i].addr_len) == -1) {
+ if (bind(s, ls[i].sockaddr, ls[i].socklen) == -1) {
err = ngx_socket_errno;
- ngx_log_error(NGX_LOG_ALERT, log, err,
- "bind to %s failed", ls[i].addr_text);
+ ngx_log_error(NGX_LOG_EMERG, log, err,
+ "bind() to %s failed", ls[i].addr_text);
if (err != NGX_EADDRINUSE)
exit(1);
if (ngx_close_socket(s) == -1)
- ngx_log_error(NGX_LOG_ALERT, log, ngx_socket_errno,
+ ngx_log_error(NGX_LOG_EMERG, log, ngx_socket_errno,
ngx_close_socket_n " %s failed",
ls[i].addr_text);
@@ -129,9 +143,11 @@
continue;
}
- if (listen(s, ls[i].backlog) == -1)
+ if (listen(s, ls[i].backlog) == -1) {
ngx_log_error(NGX_LOG_EMERG, log, ngx_socket_errno,
- "listen to %s failed", ls[i].addr_text);
+ "listen() to %s failed", ls[i].addr_text);
+ exit(1);
+ }
/* TODO: deferred accept */
@@ -142,10 +158,13 @@
if (!failed)
break;
- ngx_log_error(NGX_LOG_NOTICE, log, 0, "try to bind again after 500ms");
+ ngx_log_error(NGX_LOG_NOTICE, log, 0,
+ "try again to bind() after 500ms");
ngx_msleep(500);
}
- if (failed)
- ngx_log_error(NGX_LOG_EMERG, log, 0, "can't bind");
+ if (failed) {
+ ngx_log_error(NGX_LOG_EMERG, log, 0, "can not bind(), exiting");
+ exit(1);
+ }
}
diff --git a/src/core/ngx_alloc.c b/src/core/ngx_alloc.c
index e059e94..1fd058b 100644
--- a/src/core/ngx_alloc.c
+++ b/src/core/ngx_alloc.c
@@ -12,8 +12,8 @@
p = malloc(size);
if (p == NULL)
- ngx_log_error(NGX_LOG_ALERT, log, ngx_errno,
- "ngx_alloc: malloc() %d bytes failed", size);
+ ngx_log_error(NGX_LOG_EMERG, log, ngx_errno,
+ "malloc() %d bytes failed", size);
return p;
}
diff --git a/src/core/ngx_config.h b/src/core/ngx_config.h
index 16ea3a6..88f374a 100644
--- a/src/core/ngx_config.h
+++ b/src/core/ngx_config.h
@@ -48,6 +48,7 @@
#else /* POSIX */
#include <unistd.h>
+#include <stddef.h> /* offsetof */
#include <stdlib.h>
#include <stdio.h>
#include <stdarg.h>
diff --git a/src/core/ngx_connection.h b/src/core/ngx_connection.h
index 84cbd24..2f6d128 100644
--- a/src/core/ngx_connection.h
+++ b/src/core/ngx_connection.h
@@ -26,6 +26,15 @@
ngx_server_t *server;
ngx_server_t *servers;
ngx_pool_t *pool;
+
+ int family;
+ struct sockaddr *sockaddr;
+ socklen_t socklen;
+ size_t addr;
+ char *addr_text;
+ size_t addr_textlen;
+
+ time_t post_accept_timeout;
};
diff --git a/src/core/ngx_hunk.c b/src/core/ngx_hunk.c
index 29edfbc..f829b7e 100644
--- a/src/core/ngx_hunk.c
+++ b/src/core/ngx_hunk.c
@@ -18,7 +18,7 @@
h->type = NGX_HUNK_TEMP;
h->tag = 0;
- h->fd = (ngx_file_t) -1;
+ h->fd = (ngx_fd_t) -1;
return h;
}
@@ -39,7 +39,7 @@
h->type = NGX_HUNK_TEMP;
h->tag = 0;
- h->fd = (ngx_file_t) -1;
+ h->fd = (ngx_fd_t) -1;
} else {
h->pre_start = h->start = h->pos.mem = h->last.mem
@@ -48,7 +48,7 @@
h->type = NGX_HUNK_TEMP;
h->tag = 0;
- h->fd = (ngx_file_t) -1;
+ h->fd = (ngx_fd_t) -1;
}
return h;
@@ -71,7 +71,7 @@
hunk->last.mem;
h->type = NGX_HUNK_TEMP;
h->tag = 0;
- h->fd = (ngx_file_t) -1;
+ h->fd = (ngx_fd_t) -1;
} else {
h->pre_start = h->start = h->pos.mem = h->last.mem =
@@ -80,7 +80,7 @@
h->type = NGX_HUNK_TEMP;
h->tag = 0;
- h->fd = (ngx_file_t) -1;
+ h->fd = (ngx_fd_t) -1;
}
return h;
diff --git a/src/core/ngx_hunk.h b/src/core/ngx_hunk.h
index 36c36e8..5e2a1d4 100644
--- a/src/core/ngx_hunk.h
+++ b/src/core/ngx_hunk.h
@@ -48,7 +48,7 @@
char *pre_start; /* start of pre-allocated hunk */
char *post_end; /* end of post-allocated hunk */
int tag;
- ngx_file_t fd;
+ ngx_fd_t fd;
};
typedef struct ngx_chain_s ngx_chain_t;
diff --git a/src/core/ngx_listen.h b/src/core/ngx_listen.h
index 26980d4..8108d83 100644
--- a/src/core/ngx_listen.h
+++ b/src/core/ngx_listen.h
@@ -11,22 +11,26 @@
typedef struct {
ngx_socket_t fd;
- void *addr;
- size_t addr_len;
- char *addr_text;
+ struct sockaddr *sockaddr;
+ socklen_t socklen;
+ size_t addr;
+ char *addr_text;
+ size_t addr_textlen;
int family;
int type;
int protocol;
+ int flags;
ngx_log_t *log;
void *server;
int (*handler)(ngx_connection_t *c);
int backlog;
+ time_t post_accept_timeout;
unsigned done:1;
- unsigned close:1;
+ unsigned inherited:1;
unsigned nonblocking:1;
#if 0
unsigned overlapped:1;
diff --git a/src/core/ngx_log.c b/src/core/ngx_log.c
index 8429d90..bed628a 100644
--- a/src/core/ngx_log.c
+++ b/src/core/ngx_log.c
@@ -37,31 +37,15 @@
#endif
ngx_localtime(&tm);
- len = ngx_snprintf(errstr, sizeof(errstr), "%02d:%02d:%02d",
+ len = ngx_snprintf(errstr, sizeof(errstr), "%4d/%02d/%02d %02d:%02d:%02d",
+ tm.ngx_tm_year + 1900, tm.ngx_tm_mon, tm.ngx_tm_mday,
tm.ngx_tm_hour, tm.ngx_tm_min, tm.ngx_tm_sec);
- if (err) {
- if ((unsigned) err < 0x80000000)
- len += ngx_snprintf(errstr + len, sizeof(errstr) - len - 1,
- " [%s] (%d)",
- err_levels[level], err);
- else
- len += ngx_snprintf(errstr + len, sizeof(errstr) - len - 1,
- " [%s] (%X)",
- err_levels[level], err);
+ len += ngx_snprintf(errstr + len, sizeof(errstr) - len - 1,
+ " [%s] ", err_levels[level]);
- len += ngx_strerror_r(err, errstr + len, sizeof(errstr) - len - 1);
- if (len < sizeof(errstr) - 2) {
- errstr[len++] = ':';
- errstr[len++] = ' ';
- } else {
- len = sizeof(errstr) - 2;
- }
-
- } else {
- len += ngx_snprintf(errstr + len, sizeof(errstr) - len - 1,
- " [%s] ", err_levels[level]);
- }
+ len += ngx_snprintf(errstr + len, sizeof(errstr) - len - 1,
+ "%d#%d: ", getpid(), 0);
#if (HAVE_VARIADIC_MACROS)
va_start(args, fmt);
@@ -71,15 +55,31 @@
len += ngx_vsnprintf(errstr + len, sizeof(errstr) - len - 1, fmt, args);
#endif
+ if (err) {
+ if ((unsigned) err < 0x80000000)
+ len += ngx_snprintf(errstr + len, sizeof(errstr) - len - 1,
+ " (%d: ", err);
+ else
+ len += ngx_snprintf(errstr + len, sizeof(errstr) - len - 1,
+ " (%X: ", err);
+
+ len += ngx_strerror_r(err, errstr + len, sizeof(errstr) - len - 1);
+ if (len < sizeof(errstr) - 2) {
+ errstr[len++] = ')';
+ } else {
+ len = sizeof(errstr) - 2;
+ }
+ }
+
+ if (level != NGX_LOG_DEBUG && log->handler)
+ len += log->handler(log->data, errstr + len, sizeof(errstr) - len - 1);
+
if (len > sizeof(errstr) - 2)
len = sizeof(errstr) - 2;
errstr[len] = '\n';
errstr[len + 1] = '\0';
fputs(errstr, stderr);
-
- if (level == NGX_LOG_EMERG)
- exit(1);
}
#if !(HAVE_VARIADIC_MACROS)
diff --git a/src/core/ngx_log.h b/src/core/ngx_log.h
index 7afabcb..f1e49eb 100644
--- a/src/core/ngx_log.h
+++ b/src/core/ngx_log.h
@@ -3,6 +3,7 @@
#include <ngx_errno.h>
+#include <ngx_file.h>
typedef enum {
NGX_LOG_EMERG = 0,
@@ -59,13 +60,14 @@
*/
typedef struct {
- int log_level;
- char *action;
- char *context;
-#if 0
- void *data; /* i.e. ngx_http_proxy_error_context_t */
- char *func(ngx_log_t *log);
-#endif
+ int log_level;
+ ngx_fd_t fd;
+ void *data;
+ size_t (*handler)(void *ctx, char *buf, size_t len);
+/* STUB */
+ char *action;
+ char *context;
+/* */
} ngx_log_t;
#define MAX_ERROR_STR 2048