nginx-0.1.43-RELEASE import

    *) Feature: the listen(2) backlog in the "listen" directive can be
       changed using the -HUP signal.

    *) Feature: the geo2nginx.pl script was added to contrib.

    *) Change: the FastCGI parameters with the empty values now are passed
       to a server.

    *) Bugfix: 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 the bug had appeared in 0.1.29.
diff --git a/src/core/nginx.c b/src/core/nginx.c
index d04d954..a59e4d6 100644
--- a/src/core/nginx.c
+++ b/src/core/nginx.c
@@ -288,9 +288,9 @@
             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 8f0a365..d58f608 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 b873db2..fe75264 100644
--- a/src/core/ngx_connection.c
+++ b/src/core/ngx_connection.c
@@ -123,6 +123,8 @@
                                           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 @@
         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 10a5cd5..6dd1919 100644
--- a/src/core/ngx_connection.h
+++ b/src/core/ngx_connection.h
@@ -45,6 +45,7 @@
     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 b67223a..2c78235 100644
--- a/src/core/ngx_cycle.c
+++ b/src/core/ngx_cycle.c
@@ -339,6 +339,10 @@
                         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 @@
                 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 @@
                         ls[i].deferred_accept = 1;
                     }
 #endif
+#endif
                 }
             }
-#endif
         }
     }