summaryrefslogtreecommitdiffhomepage
path: root/src/event
diff options
context:
space:
mode:
authorIgor Sysoev <igor@sysoev.ru>2006-07-11 13:20:19 +0000
committerIgor Sysoev <igor@sysoev.ru>2006-07-11 13:20:19 +0000
commitbb28b6d3a455c20077a7e2d7319c24e484694a72 (patch)
tree32b623670825037be2ec50a8082176d9173a917a /src/event
parent09e1981c04aa20858f63ee2eeff588ca3827282b (diff)
downloadnginx-release-0.3.54.tar.gz
nginx-release-0.3.54.tar.bz2
nginx-0.3.54-RELEASE importrelease-0.3.54
*) Feature: nginx now logs the subrequest information to the error log. *) Feature: the "proxy_next_upstream", "fastcgi_next_upstream", and "memcached_next_upstream" directives support the "off" parameter. *) Feature: the "debug_connection" directive supports the CIDR address form. *) Bugfix: if a response of proxied server or FastCGI server was converted from UTF-8 or back, then it may be transferred incomplete. *) Bugfix: the $upstream_response_time variable had the time of the first request to a backend only. *) Bugfix: nginx could not be built on amd64 platform; the bug had appeared in 0.3.53.
Diffstat (limited to '')
-rw-r--r--src/event/ngx_event.c27
-rw-r--r--src/event/ngx_event.h6
-rw-r--r--src/event/ngx_event_accept.c12
3 files changed, 30 insertions, 15 deletions
diff --git a/src/event/ngx_event.c b/src/event/ngx_event.c
index 7dc15623a..7d4cdbad6 100644
--- a/src/event/ngx_event.c
+++ b/src/event/ngx_event.c
@@ -1035,22 +1035,30 @@ ngx_event_debug_connection(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
#if (NGX_DEBUG)
ngx_event_conf_t *ecf = conf;
- in_addr_t *addr;
- ngx_str_t *value;
- struct hostent *h;
+ ngx_event_debug_t *dc;
+ ngx_str_t *value;
+ struct hostent *h;
+ ngx_inet_cidr_t in_cidr;
value = cf->args->elts;
/* AF_INET only */
- addr = ngx_array_push(&ecf->debug_connection);
- if (addr == NULL) {
+ dc = ngx_array_push(&ecf->debug_connection);
+ if (dc == NULL) {
return NGX_CONF_ERROR;
}
- *addr = inet_addr((char *) value[1].data);
+ dc->addr = inet_addr((char *) value[1].data);
- if (*addr != INADDR_NONE) {
+ if (dc->addr != INADDR_NONE) {
+ dc->mask = 0xffffffff;
+ return NGX_OK;
+ }
+
+ if (ngx_ptocidr(&value[1], &in_cidr) == NGX_OK) {
+ dc->mask = in_cidr.mask;
+ dc->addr = in_cidr.addr;
return NGX_OK;
}
@@ -1062,7 +1070,8 @@ ngx_event_debug_connection(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
return NGX_CONF_ERROR;
}
- *addr = *(in_addr_t *)(h->h_addr_list[0]);
+ dc->mask = 0xffffffff;
+ dc->addr = *(in_addr_t *)(h->h_addr_list[0]);
#else
@@ -1096,7 +1105,7 @@ ngx_event_create_conf(ngx_cycle_t *cycle)
#if (NGX_DEBUG)
if (ngx_array_init(&ecf->debug_connection, cycle->pool, 4,
- sizeof(in_addr_t)) == NGX_ERROR)
+ sizeof(ngx_event_debug_t)) == NGX_ERROR)
{
return NGX_CONF_ERROR;
}
diff --git a/src/event/ngx_event.h b/src/event/ngx_event.h
index 25f41896a..edcee4f10 100644
--- a/src/event/ngx_event.h
+++ b/src/event/ngx_event.h
@@ -189,6 +189,12 @@ struct ngx_event_s {
typedef struct {
+ in_addr_t mask;
+ in_addr_t addr;
+} ngx_event_debug_t;
+
+
+typedef struct {
ngx_int_t (*add)(ngx_event_t *ev, int event, u_int flags);
ngx_int_t (*del)(ngx_event_t *ev, int event, u_int flags);
diff --git a/src/event/ngx_event_accept.c b/src/event/ngx_event_accept.c
index e41f04ae5..efd09e1d9 100644
--- a/src/event/ngx_event_accept.c
+++ b/src/event/ngx_event_accept.c
@@ -198,9 +198,6 @@ ngx_event_accept(ngx_event_t *ev)
wev->own_lock = &c->lock;
#endif
- ngx_log_debug2(NGX_LOG_DEBUG_EVENT, log, 0,
- "accept: fd:%d c:%d", s, c->number);
-
if (ls->addr_ntop) {
c->addr_text.data = ngx_palloc(c->pool, ls->addr_text_max_len);
if (c->addr_text.data == NULL) {
@@ -220,14 +217,14 @@ ngx_event_accept(ngx_event_t *ev)
#if (NGX_DEBUG)
{
- uint32_t *addr;
in_addr_t i;
+ ngx_event_debug_t *dc;
struct sockaddr_in *sin;
sin = (struct sockaddr_in *) sa;
- addr = ecf->debug_connection.elts;
+ dc = ecf->debug_connection.elts;
for (i = 0; i < ecf->debug_connection.nelts; i++) {
- if (addr[i] == sin->sin_addr.s_addr) {
+ if ((sin->sin_addr.s_addr & dc[i].mask) == dc[i].addr) {
log->log_level = NGX_LOG_DEBUG_CONNECTION|NGX_LOG_DEBUG_ALL;
break;
}
@@ -236,6 +233,9 @@ ngx_event_accept(ngx_event_t *ev)
}
#endif
+ ngx_log_debug3(NGX_LOG_DEBUG_EVENT, log, 0,
+ "*%d accept: %V fd:%d", c->number, &c->addr_text, s);
+
if (ngx_add_conn && (ngx_event_flags & NGX_USE_EPOLL_EVENT) == 0) {
if (ngx_add_conn(c) == NGX_ERROR) {
ngx_close_accepted_connection(c);