]> git.kaiwu.me - nginx.git/commitdiff
r2561 merge:
authorIgor Sysoev <igor@sysoev.ru>
Wed, 1 Apr 2009 16:42:09 +0000 (16:42 +0000)
committerIgor Sysoev <igor@sysoev.ru>
Wed, 1 Apr 2009 16:42:09 +0000 (16:42 +0000)
ignore EINVAL from setsockopt() on Solaris

src/core/ngx_connection.c
src/core/ngx_connection.h
src/http/ngx_http_request.c

index b49a696f2f800d2ca872bd4746e9a3f9cd457264..7982d963e397404d58708d7045b7580fd385117b 100644 (file)
@@ -779,12 +779,16 @@ ngx_connection_error(ngx_connection_t *c, ngx_err_t err, char *text)
 {
     ngx_uint_t  level;
 
-    if (err == NGX_ECONNRESET
-        && c->log_error == NGX_ERROR_IGNORE_ECONNRESET)
-    {
+    if (err == NGX_ECONNRESET && c->log_error == NGX_ERROR_IGNORE_ECONNRESET) {
         return 0;
     }
 
+#if (NGX_SOLARIS)
+    if (err == NGX_EINVAL && c->log_error == NGX_ERROR_IGNORE_EINVAL) {
+        return 0;
+    }
+#endif
+
     if (err == 0
         || err == NGX_ECONNRESET
 #if !(NGX_WIN32)
@@ -800,6 +804,7 @@ ngx_connection_error(ngx_connection_t *c, ngx_err_t err, char *text)
     {
         switch (c->log_error) {
 
+        case NGX_ERROR_IGNORE_EINVAL:
         case NGX_ERROR_IGNORE_ECONNRESET:
         case NGX_ERROR_INFO:
             level = NGX_LOG_INFO;
index a2ae690f54617716232efc60018b2a1e68e405c8..ac867969783f3e307e9852cbb746392fb87c5596 100644 (file)
@@ -71,10 +71,11 @@ struct ngx_listening_s {
 
 
 typedef enum {
-     NGX_ERROR_CRIT = 0,
+     NGX_ERROR_ALERT = 0,
      NGX_ERROR_ERR,
      NGX_ERROR_INFO,
-     NGX_ERROR_IGNORE_ECONNRESET
+     NGX_ERROR_IGNORE_ECONNRESET,
+     NGX_ERROR_IGNORE_EINVAL
 } ngx_connection_log_error_e;
 
 
@@ -135,7 +136,7 @@ struct ngx_connection_s {
 
     unsigned            buffered:8;
 
-    unsigned            log_error:2;     /* ngx_connection_log_error_e */
+    unsigned            log_error:3;     /* ngx_connection_log_error_e */
 
     unsigned            single_connection:1;
     unsigned            unexpected_eof:1;
index bcfe21bbcec640c8bedb18b7f08e0e7bf74bff20..f7c2ffa46b2e75208393de3cfe49903fda8a9832 100644 (file)
@@ -2264,8 +2264,15 @@ ngx_http_set_keepalive(ngx_http_request_t *r)
                        (const void *) &tcp_nodelay, sizeof(int))
             == -1)
         {
+#if (NGX_SOLARIS)
+            /* Solaris returns EINVAL if a socket has been shut down */
+            c->log_error = NGX_ERROR_IGNORE_EINVAL;
+#endif
+
             ngx_connection_error(c, ngx_socket_errno,
                                  "setsockopt(TCP_NODELAY) failed");
+
+            c->log_error = NGX_ERROR_INFO;
             ngx_http_close_connection(c);
             return;
         }