summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--conf/fastcgi_params23
-rw-r--r--contrib/README6
-rw-r--r--contrib/geo2nginx.pl58
-rw-r--r--docs/xml/nginx/changes.xml65
-rw-r--r--src/core/nginx.c6
-rw-r--r--src/core/nginx.h2
-rw-r--r--src/core/ngx_connection.c5
-rw-r--r--src/core/ngx_connection.h1
-rw-r--r--src/core/ngx_cycle.c19
-rw-r--r--src/http/modules/ngx_http_fastcgi_module.c33
-rw-r--r--src/http/modules/ngx_http_headers_filter_module.c23
-rw-r--r--src/http/ngx_http_request.c19
-rw-r--r--src/http/ngx_http_request.h1
-rw-r--r--src/http/ngx_http_request_body.c2
-rw-r--r--src/http/ngx_http_upstream.c56
-rw-r--r--src/os/unix/ngx_freebsd_sendfile_chain.c11
-rw-r--r--src/os/unix/ngx_recv.c12
-rw-r--r--src/os/unix/ngx_send.c7
-rw-r--r--src/os/unix/ngx_writev_chain.c7
19 files changed, 266 insertions, 90 deletions
diff --git a/conf/fastcgi_params b/conf/fastcgi_params
new file mode 100644
index 000000000..748a06c7c
--- /dev/null
+++ b/conf/fastcgi_params
@@ -0,0 +1,23 @@
+
+fastcgi_param QUERY_STRING $query_string;
+fastcgi_param REQUEST_METHOD $request_method;
+fastcgi_param CONTENT_TYPE $content_type;
+fastcgi_param CONTENT_LENGTH $content_length;
+
+fastcgi_param SCRIPT_NAME $fastcgi_script_name;
+fastcgi_param REQUEST_URI $request_uri;
+fastcgi_param DOCUMENT_URI $document_uri;
+fastcgi_param DOCUMENT_ROOT $document_root;
+fastcgi_param SERVER_PROTOCOL $server_protocol;
+
+fastcgi_param GATEWAY_INTERFACE CGI/1.1;
+fastcgi_param SERVER_SOFTWARE nginx;
+
+fastcgi_param REMOTE_ADDR $remote_addr;
+fastcgi_param REMOTE_PORT $remote_port;
+fastcgi_param SERVER_ADDR $server_addr;
+fastcgi_param SERVER_PORT $server_port;
+fastcgi_param SERVER_NAME $server_name;
+
+# PHP only, required if PHP was built with --enable-force-cgi-redirect
+fastcgi_param REDIRECT_STATUS 200;
diff --git a/contrib/README b/contrib/README
new file mode 100644
index 000000000..3a6909570
--- /dev/null
+++ b/contrib/README
@@ -0,0 +1,6 @@
+
+geo2nginx.pl by Andrei Nigmatulin
+
+ The perl script to convert CSV geoip database (free download
+ at http://www.maxmind.com/app/geoip_country) to format, suitable
+ for use with ngx_http_geo_module.
diff --git a/contrib/geo2nginx.pl b/contrib/geo2nginx.pl
new file mode 100644
index 000000000..29243ecf2
--- /dev/null
+++ b/contrib/geo2nginx.pl
@@ -0,0 +1,58 @@
+#!/usr/bin/perl -w
+
+# (c) Andrei Nigmatulin, 2005
+#
+# this script provided "as is", without any warranties. use it at your own risk.
+#
+# special thanx to Andrew Sitnikov for perl port
+#
+# this script converts CSV geoip database (free download at http://www.maxmind.com/app/geoip_country)
+# to format, suitable for use with nginx_http_geo module (http://sysoev.ru/nginx)
+#
+# for example, line with ip range
+#
+# "62.16.68.0","62.16.127.255","1041253376","1041268735","RU","Russian Federation"
+#
+# will be converted to four subnetworks:
+#
+# 62.16.68.0/22 RU;
+# 62.16.72.0/21 RU;
+# 62.16.80.0/20 RU;
+# 62.16.96.0/19 RU;
+
+
+use warnings;
+use strict;
+
+while( <STDIN> ){
+ if (/"[^"]+","[^"]+","([^"]+)","([^"]+)","([^"]+)"/){
+ print_subnets($1, $2, $3);
+ }
+}
+
+sub print_subnets {
+ my ($a1, $a2, $c) = @_;
+ my $l;
+ while ($a1 <= $a2) {
+ for ($l = 0; ($a1 & (1 << $l)) == 0 && ($a1 + ((1 << ($l + 1)) - 1)) <= $a2; $l++){};
+ print long2ip($a1) . "/" . (32 - $l) . " " . $c . ";\n";
+ $a1 += (1 << $l);
+ }
+}
+
+sub long2ip {
+ my $ip = shift;
+
+ my $str = 0;
+
+ $str = ($ip & 255);
+
+ $ip >>= 8;
+ $str = ($ip & 255).".$str";
+
+ $ip >>= 8;
+ $str = ($ip & 255).".$str";
+
+ $ip >>= 8;
+ $str = ($ip & 255).".$str";
+}
diff --git a/docs/xml/nginx/changes.xml b/docs/xml/nginx/changes.xml
index 9ba8ffa8d..b8430ef9d 100644
--- a/docs/xml/nginx/changes.xml
+++ b/docs/xml/nginx/changes.xml
@@ -9,6 +9,71 @@
<title lang="en">nginx changelog</title>
+<changes ver="0.1.43" date="30.08.2005">
+
+<change type="feature">
+<para lang="ru">
+listen(2) backlog в директиве listen можно менять по сигналу -HUP.
+</para>
+<para lang="en">
+the listen(2) backlog in the "listen" directive
+can be changed using the -HUP signal.
+</para>
+</change>
+
+<change type="feature">
+<para lang="ru">
+скрипт geo2nginx.pl добавлен в contrib.
+</para>
+<para lang="en">
+the geo2nginx.pl script was added to contrib.
+</para>
+</change>
+
+<change type="change">
+<para lang="ru">
+параметры FastCGI, с пустым значениями, теперь передаются серверу.
+</para>
+<para lang="en">
+the FastCGI parameters with the empty values now are passed to a server.
+</para>
+</change>
+
+<!--
+
+<change type="bugfix">
+<para lang="ru">
+при ошибках в работе с проксированным сервером или FastCGI сервером
+мог произойти segmentation fault;
+в режиме прокси ошибка появилась в 0.1.29.
+</para>
+<para lang="en">
+the segmentation fault may occurred if there were errors while
+working with proxied or FastCGI server;
+in the proxied mode the bug appeared in 0.1.29.
+</para>
+</change>
+
+-->
+
+<change type="bugfix">
+<para lang="ru">
+если в ответе проксированного сервера или FastCGI сервера была строка
+"Cache-Control", то при использовании директивы expires происходил
+segmentation fault или рабочий процесс мог зациклится;
+в режиме прокси ошибка появилась в 0.1.29.
+</para>
+<para lang="en">
+the segmentation fault occurred or the worker process may got caught
+in an endless loop if the proxied or FastCGI server sent the "Cache-Control"
+header line and the "expires" directive was used;
+in the proxied mode the bug appeared in 0.1.29.
+</para>
+</change>
+
+</changes>
+
+
<changes ver="0.1.42" date="23.08.2005">
<change type="bugfix">
diff --git a/src/core/nginx.c b/src/core/nginx.c
index d04d95499..a59e4d6f3 100644
--- a/src/core/nginx.c
+++ b/src/core/nginx.c
@@ -288,9 +288,9 @@ ngx_add_inherited_sockets(ngx_cycle_t *cycle)
s = ngx_atoi(v, p - v);
if (s == NGX_ERROR) {
ngx_log_error(NGX_LOG_EMERG, cycle->log, 0,
- "invalid socket number \"%s\" in "
- NGINX_VAR " environment variable, "
- "ignoring the rest of the variable", v);
+ "invalid socket number \"%s\" in " NGINX_VAR
+ " environment variable, ignoring the rest"
+ " of the variable", v);
break;
}
diff --git a/src/core/nginx.h b/src/core/nginx.h
index 8f0a36513..d58f6086d 100644
--- a/src/core/nginx.h
+++ b/src/core/nginx.h
@@ -8,7 +8,7 @@
#define _NGINX_H_INCLUDED_
-#define NGINX_VER "nginx/0.1.42"
+#define NGINX_VER "nginx/0.1.43"
#define NGINX_VAR "NGINX"
#define NGX_NEWPID_EXT ".newbin"
diff --git a/src/core/ngx_connection.c b/src/core/ngx_connection.c
index b873db2e8..fe75264db 100644
--- a/src/core/ngx_connection.c
+++ b/src/core/ngx_connection.c
@@ -123,6 +123,8 @@ ngx_set_inherited_sockets(ngx_cycle_t *cycle)
ntohs(sin->sin_port))
- ls[i].addr_text.data;
+ ls[i].backlog = -1;
+
#if (NGX_HAVE_DEFERRED_ACCEPT && defined SO_ACCEPTFILTER)
ngx_memzero(&af, sizeof(struct accept_filter_arg));
@@ -467,7 +469,8 @@ ngx_connection_error(ngx_connection_t *c, ngx_err_t err, char *text)
return 0;
}
- if (err == NGX_ECONNRESET
+ if (err == 0
+ || err == NGX_ECONNRESET
#if !(NGX_WIN32)
|| err == NGX_EPIPE
#endif
diff --git a/src/core/ngx_connection.h b/src/core/ngx_connection.h
index 10a5cd587..6dd191938 100644
--- a/src/core/ngx_connection.h
+++ b/src/core/ngx_connection.h
@@ -45,6 +45,7 @@ typedef struct {
unsigned bound:1; /* already bound */
unsigned inherited:1; /* inherited from previous process */
unsigned nonblocking_accept:1;
+ unsigned change_backlog:1;
unsigned nonblocking:1;
unsigned shared:1; /* shared between threads or processes */
unsigned addr_ntop:1;
diff --git a/src/core/ngx_cycle.c b/src/core/ngx_cycle.c
index b67223a69..2c7823557 100644
--- a/src/core/ngx_cycle.c
+++ b/src/core/ngx_cycle.c
@@ -339,6 +339,10 @@ ngx_cycle_t *ngx_init_cycle(ngx_cycle_t *old_cycle)
nls[n].remain = 1;
ls[i].remain = 1;
+ if (ls[n].backlog != nls[i].backlog) {
+ nls[n].change_backlog = 1;
+ }
+
#if (NGX_HAVE_DEFERRED_ACCEPT && defined SO_ACCEPTFILTER)
/*
@@ -405,12 +409,21 @@ ngx_cycle_t *ngx_init_cycle(ngx_cycle_t *old_cycle)
failed = 1;
}
-#if (NGX_HAVE_DEFERRED_ACCEPT)
-
if (!failed) {
ls = cycle->listening.elts;
for (i = 0; i < cycle->listening.nelts; i++) {
+ if (ls[i].change_backlog) {
+ if (listen(ls[i].fd, ls[i].backlog) == -1) {
+ ngx_log_error(NGX_LOG_ALERT, log, ngx_socket_errno,
+ "changing the listen() backlog to %d "
+ "for %V failed, ignored",
+ &ls[i].addr_text, ls[i].backlog);
+ }
+ }
+
+#if (NGX_HAVE_DEFERRED_ACCEPT)
+
#ifdef SO_ACCEPTFILTER
if (ls[i].delete_deferred) {
if (setsockopt(ls[i].fd, SOL_SOCKET, SO_ACCEPTFILTER,
@@ -476,9 +489,9 @@ ngx_cycle_t *ngx_init_cycle(ngx_cycle_t *old_cycle)
ls[i].deferred_accept = 1;
}
#endif
+#endif
}
}
-#endif
}
}
diff --git a/src/http/modules/ngx_http_fastcgi_module.c b/src/http/modules/ngx_http_fastcgi_module.c
index 480a22895..c5a2c4bc4 100644
--- a/src/http/modules/ngx_http_fastcgi_module.c
+++ b/src/http/modules/ngx_http_fastcgi_module.c
@@ -144,15 +144,6 @@ static ngx_http_fastcgi_request_start_t ngx_http_fastcgi_request_start = {
};
-#if 0
-static ngx_str_t ngx_http_fastcgi_methods[] = {
- ngx_string("GET"),
- ngx_string("HEAD"),
- ngx_string("POST")
-};
-#endif
-
-
static ngx_str_t ngx_http_fastcgi_script_name =
ngx_string("fastcgi_script_name");
@@ -428,9 +419,7 @@ ngx_http_fastcgi_create_request(ngx_http_request_t *r)
}
le.ip += sizeof(uintptr_t);
- if (val_len) {
- len += 1 + key_len + ((val_len > 127) ? 4 : 1) + val_len;
- }
+ len += 1 + key_len + ((val_len > 127) ? 4 : 1) + val_len;
}
}
@@ -527,22 +516,18 @@ ngx_http_fastcgi_create_request(ngx_http_request_t *r)
}
le.ip += sizeof(uintptr_t);
- if (val_len) {
- *e.pos++ = (u_char) key_len;
+ *e.pos++ = (u_char) key_len;
- if (val_len > 127) {
- *e.pos++ = (u_char) (((val_len >> 24) & 0x7f) | 0x80);
- *e.pos++ = (u_char) ((val_len >> 16) & 0xff);
- *e.pos++ = (u_char) ((val_len >> 8) & 0xff);
- *e.pos++ = (u_char) (val_len & 0xff);
+ if (val_len > 127) {
+ *e.pos++ = (u_char) (((val_len >> 24) & 0x7f) | 0x80);
+ *e.pos++ = (u_char) ((val_len >> 16) & 0xff);
+ *e.pos++ = (u_char) ((val_len >> 8) & 0xff);
+ *e.pos++ = (u_char) (val_len & 0xff);
- } else {
- *e.pos++ = (u_char) val_len;
- }
+ } else {
+ *e.pos++ = (u_char) val_len;
}
- e.skip = val_len ? 0 : 1;
-
while (*(uintptr_t *) e.ip) {
code = *(ngx_http_script_code_pt *) e.ip;
code((ngx_http_script_engine_t *) &e);
diff --git a/src/http/modules/ngx_http_headers_filter_module.c b/src/http/modules/ngx_http_headers_filter_module.c
index f27ab476d..91bebdc50 100644
--- a/src/http/modules/ngx_http_headers_filter_module.c
+++ b/src/http/modules/ngx_http_headers_filter_module.c
@@ -73,7 +73,7 @@ ngx_http_headers_filter(ngx_http_request_t *r)
{
size_t len;
ngx_uint_t i;
- ngx_table_elt_t *expires, *cc;
+ ngx_table_elt_t *expires, *cc, **ccp;
ngx_http_headers_conf_t *conf;
if (r->headers_out.status != NGX_HTTP_OK || r->main) {
@@ -103,9 +103,20 @@ ngx_http_headers_filter(ngx_http_request_t *r)
len = sizeof("Mon, 28 Sep 1970 06:00:00 GMT");
expires->value.len = len - 1;
- cc = r->headers_out.cache_control.elts;
+ ccp = r->headers_out.cache_control.elts;
- if (cc == NULL) {
+ if (ccp == NULL) {
+
+ if (ngx_array_init(&r->headers_out.cache_control, r->pool,
+ 1, sizeof(ngx_table_elt_t *)) != NGX_OK)
+ {
+ return NGX_ERROR;
+ }
+
+ ccp = ngx_array_push(&r->headers_out.cache_control);
+ if (ccp == NULL) {
+ return NGX_ERROR;
+ }
cc = ngx_list_push(&r->headers_out.headers);
if (cc == NULL) {
@@ -116,10 +127,14 @@ ngx_http_headers_filter(ngx_http_request_t *r)
cc->key.len = sizeof("Cache-Control") - 1;
cc->key.data = (u_char *) "Cache-Control";
+ *ccp = cc;
+
} else {
for (i = 1; i < r->headers_out.cache_control.nelts; i++) {
- cc[i].hash = 0;
+ ccp[i]->hash = 0;
}
+
+ cc = ccp[0];
}
if (conf->expires == NGX_HTTP_EXPIRES_EPOCH) {
diff --git a/src/http/ngx_http_request.c b/src/http/ngx_http_request.c
index c6a580948..b8e97d2a7 100644
--- a/src/http/ngx_http_request.c
+++ b/src/http/ngx_http_request.c
@@ -637,8 +637,24 @@ ngx_http_process_request_line(ngx_event_t *rev)
"http exten: \"%V\"", &r->exten);
if (r->http_version < NGX_HTTP_VERSION_10) {
+
+ if (rev->timer_set) {
+ ngx_del_timer(rev);
+ }
+
+#if (NGX_STAT_STUB)
+ ngx_atomic_dec(ngx_stat_reading);
+ r->stat_reading = 0;
+ ngx_atomic_inc(ngx_stat_writing);
+ r->stat_writing = 1;
+#endif
+
+ rev->handler = ngx_http_request_handler;
+ c->write->handler = ngx_http_request_handler;
r->read_event_handler = ngx_http_block_read;
+
ngx_http_handler(r);
+
return;
}
@@ -868,6 +884,7 @@ ngx_http_process_request_headers(ngx_event_t *rev)
r->read_event_handler = ngx_http_block_read;
ngx_http_handler(r);
+
return;
}
@@ -1783,6 +1800,8 @@ ngx_http_discard_body(ngx_http_request_t *r)
return NGX_OK;
}
+ r->discard_body = 1;
+
size = r->header_in->last - r->header_in->pos;
if (size) {
diff --git a/src/http/ngx_http_request.h b/src/http/ngx_http_request.h
index 2e8099102..fe56b26f5 100644
--- a/src/http/ngx_http_request.h
+++ b/src/http/ngx_http_request.h
@@ -362,6 +362,7 @@ struct ngx_http_request_s {
unsigned header_only:1;
unsigned keepalive:1;
unsigned lingering_close:1;
+ unsigned discard_body:1;
unsigned internal:1;
unsigned done:1;
unsigned utf8:1;
diff --git a/src/http/ngx_http_request_body.c b/src/http/ngx_http_request_body.c
index eb2e6a570..66c7c6722 100644
--- a/src/http/ngx_http_request_body.c
+++ b/src/http/ngx_http_request_body.c
@@ -31,7 +31,7 @@ ngx_http_read_client_request_body(ngx_http_request_t *r,
ngx_http_request_body_t *rb;
ngx_http_core_loc_conf_t *clcf;
- if (r->request_body) {
+ if (r->request_body || r->discard_body) {
post_handler(r);
return NGX_OK;
}
diff --git a/src/http/ngx_http_upstream.c b/src/http/ngx_http_upstream.c
index f59ff179e..c575347db 100644
--- a/src/http/ngx_http_upstream.c
+++ b/src/http/ngx_http_upstream.c
@@ -241,7 +241,9 @@ ngx_http_upstream_init(ngx_http_request_t *r)
u = r->upstream;
- u->request_bufs = r->request_body->bufs;
+ if (r->request_body) {
+ u->request_bufs = r->request_body->bufs;
+ }
if (u->conf->method == NGX_CONF_UNSET_UINT) {
u->method = r->method;
@@ -250,7 +252,7 @@ ngx_http_upstream_init(ngx_http_request_t *r)
u->method = u->conf->method;
}
- if (u->create_request(r) == NGX_ERROR) {
+ if (u->create_request(r) != NGX_OK) {
ngx_http_finalize_request(r, NGX_HTTP_INTERNAL_SERVER_ERROR);
return;
}
@@ -615,9 +617,8 @@ ngx_http_upstream_send_request(ngx_http_request_t *r, ngx_http_upstream_t *u)
&& !u->request_sent
&& c->write->pending_eof)
{
- ngx_log_error(NGX_LOG_ERR, c->log, c->write->kq_errno,
- "connect() failed");
-
+ (void) ngx_connection_error(c, c->write->kq_errno,
+ "kevent() reported that connect() failed");
ngx_http_upstream_next(r, u, NGX_HTTP_UPSTREAM_FT_ERROR);
return;
}
@@ -716,12 +717,6 @@ ngx_http_upstream_send_request_handler(ngx_event_t *wev)
return;
}
- if (r->connection->write->eof && (!u->cachable || !u->request_sent)) {
- ngx_http_upstream_finalize_request(r, u,
- NGX_HTTP_INTERNAL_SERVER_ERROR);
- return;
- }
-
ngx_http_upstream_send_request(r, u);
}
@@ -1788,6 +1783,7 @@ static u_char *
ngx_http_upstream_log_error(ngx_http_request_t *r, u_char *buf, size_t len)
{
u_char *p;
+ ngx_str_t line;
uintptr_t escape;
ngx_http_upstream_t *u;
ngx_peer_connection_t *peer;
@@ -1824,33 +1820,35 @@ ngx_http_upstream_log_error(ngx_http_request_t *r, u_char *buf, size_t len)
buf += r->uri.len - u->conf->location->len + escape;
len -= r->uri.len - u->conf->location->len + escape;
- if (r->args.len) {
- p = ngx_snprintf(buf, len, "?%V", &r->args);
- len -= p - buf;
- buf = p;
+ } else {
+ p = ngx_palloc(r->pool,
+ r->uri.len - u->conf->location->len + escape);
+ if (p == NULL) {
+ return buf;
}
- return ngx_http_log_error_info(r, buf, len);
- }
+ ngx_escape_uri(p, r->uri.data + u->conf->location->len,
+ r->uri.len - u->conf->location->len, NGX_ESCAPE_URI);
- p = ngx_palloc(r->pool, r->uri.len - u->conf->location->len + escape);
- if (p == NULL) {
- return buf;
+ line.len = len;
+ line.data = p;
+
+ return ngx_snprintf(buf, len, "%V", &line);
}
- ngx_escape_uri(p, r->uri.data + u->conf->location->len,
- r->uri.len - u->conf->location->len, NGX_ESCAPE_URI);
+ } else {
+ line.len = r->uri.len - u->conf->location->len;
+ if (line.len > len) {
+ line.len = len;
+ }
- p = ngx_cpymem(buf, p, r->uri.len - u->conf->location->len + escape);
+ line.data = r->uri.data + u->conf->location->len;
+ p = ngx_snprintf(buf, len, "%V", &line);
- } else {
- p = ngx_cpymem(buf, r->uri.data + u->conf->location->len,
- r->uri.len - u->conf->location->len);
+ len -= p - buf;
+ buf = p;
}
- len -= p - buf;
- buf = p;
-
if (r->args.len) {
p = ngx_snprintf(buf, len, "?%V", &r->args);
len -= p - buf;
diff --git a/src/os/unix/ngx_freebsd_sendfile_chain.c b/src/os/unix/ngx_freebsd_sendfile_chain.c
index a29aaf3c9..7ae594897 100644
--- a/src/os/unix/ngx_freebsd_sendfile_chain.c
+++ b/src/os/unix/ngx_freebsd_sendfile_chain.c
@@ -57,9 +57,8 @@ ngx_freebsd_sendfile_chain(ngx_connection_t *c, ngx_chain_t *in, off_t limit)
#if (NGX_HAVE_KQUEUE)
if ((ngx_event_flags & NGX_USE_KQUEUE_EVENT) && wev->pending_eof) {
- ngx_log_error(NGX_LOG_INFO, c->log, wev->kq_errno,
- "kevent() reported about an closed connection");
-
+ (void) ngx_connection_error(c, wev->kq_errno,
+ "kevent() reported about an closed connection");
wev->error = 1;
return NGX_CHAIN_ERROR;
}
@@ -228,8 +227,8 @@ ngx_freebsd_sendfile_chain(ngx_connection_t *c, ngx_chain_t *in, off_t limit)
if (err != NGX_EINTR) {
wev->error = 1;
- ngx_connection_error(c, err,
- ngx_tcp_nopush_n " failed");
+ (void) ngx_connection_error(c, err,
+ ngx_tcp_nopush_n " failed");
return NGX_CHAIN_ERROR;
}
@@ -276,7 +275,7 @@ ngx_freebsd_sendfile_chain(ngx_connection_t *c, ngx_chain_t *in, off_t limit)
} else {
wev->error = 1;
- ngx_connection_error(c, err, "sendfile() failed");
+ (void) ngx_connection_error(c, err, "sendfile() failed");
return NGX_CHAIN_ERROR;
}
}
diff --git a/src/os/unix/ngx_recv.c b/src/os/unix/ngx_recv.c
index 369be661a..e96ca7898 100644
--- a/src/os/unix/ngx_recv.c
+++ b/src/os/unix/ngx_recv.c
@@ -29,20 +29,12 @@ ssize_t ngx_unix_recv(ngx_connection_t *c, u_char *buf, size_t size)
rev->ready = 0;
rev->eof = 1;
- ngx_log_error(NGX_LOG_INFO, c->log, rev->kq_errno,
- "kevent() reported about an closed connection");
-
if (rev->kq_errno) {
rev->error = 1;
ngx_set_socket_errno(rev->kq_errno);
- if (rev->kq_errno == NGX_ECONNRESET
- && c->log_error == NGX_ERROR_IGNORE_ECONNRESET)
- {
- return 0;
- }
-
- return NGX_ERROR;
+ return ngx_connection_error(c, rev->kq_errno,
+ "kevent() reported about an closed connection");
}
return 0;
diff --git a/src/os/unix/ngx_send.c b/src/os/unix/ngx_send.c
index ffe6bcba2..167f2eca3 100644
--- a/src/os/unix/ngx_send.c
+++ b/src/os/unix/ngx_send.c
@@ -20,9 +20,8 @@ ssize_t ngx_unix_send(ngx_connection_t *c, u_char *buf, size_t size)
#if (NGX_HAVE_KQUEUE)
if ((ngx_event_flags & NGX_USE_KQUEUE_EVENT) && wev->pending_eof) {
- ngx_log_error(NGX_LOG_INFO, c->log, wev->kq_errno,
- "kevent() reported about an closed connection");
-
+ (void) ngx_connection_error(c, wev->kq_errno,
+ "kevent() reported about an closed connection");
wev->error = 1;
return NGX_ERROR;
}
@@ -63,7 +62,7 @@ ssize_t ngx_unix_send(ngx_connection_t *c, u_char *buf, size_t size)
} else {
wev->error = 1;
- ngx_connection_error(c, err, "send() failed");
+ (void) ngx_connection_error(c, err, "send() failed");
return NGX_ERROR;
}
}
diff --git a/src/os/unix/ngx_writev_chain.c b/src/os/unix/ngx_writev_chain.c
index ed3ad7158..6d516ac69 100644
--- a/src/os/unix/ngx_writev_chain.c
+++ b/src/os/unix/ngx_writev_chain.c
@@ -34,9 +34,8 @@ ngx_writev_chain(ngx_connection_t *c, ngx_chain_t *in, off_t limit)
#if (NGX_HAVE_KQUEUE)
if ((ngx_event_flags & NGX_USE_KQUEUE_EVENT) && wev->pending_eof) {
- ngx_log_error(NGX_LOG_INFO, c->log, wev->kq_errno,
- "kevent() reported about an closed connection");
-
+ (void) ngx_connection_error(c, wev->kq_errno,
+ "kevent() reported about an closed connection");
wev->error = 1;
return NGX_CHAIN_ERROR;
}
@@ -117,7 +116,7 @@ ngx_writev_chain(ngx_connection_t *c, ngx_chain_t *in, off_t limit)
} else {
wev->error = 1;
- ngx_connection_error(c, err, "writev() failed");
+ (void) ngx_connection_error(c, err, "writev() failed");
return NGX_CHAIN_ERROR;
}
}