open socket #103 left in 2 connection

Igor Sysoev is at rambler-co.ru
Mon Mar 9 23:33:19 MSK 2009


On Mon, Mar 09, 2009 at 11:25:55PM +0300, Igor Sysoev wrote:

> >    И еще очень прошу setsockopt(TCP_NODELAY) failed (22: Invalid
> >    argument) while keepalive
> > 
> >    убрать на уровень бедага... поскольку в Солярке EINVAL посылается
> >    когда сокет был закрыт со стороны клиента...
> > 
> >    у меня лог ошибок на 95% состоит из этих строк :-)
> 
> Скорее всего, я сделаю в этом месте исключение для Соляриса.

Патч.


-- 
Игорь Сысоев
http://sysoev.ru
-------------- next part --------------
Index: src/http/ngx_http_request.c
===================================================================
--- src/http/ngx_http_request.c	(revision 1869)
+++ src/http/ngx_http_request.c	(working copy)
@@ -2230,6 +2230,7 @@
 ngx_http_set_keepalive(ngx_http_request_t *r)
 {
     int                        tcp_nodelay;
+    ngx_err_t                  err;
     ngx_int_t                  i;
     ngx_buf_t                 *b, *f;
     ngx_event_t               *rev, *wev;
@@ -2420,8 +2421,15 @@
                        (const void *) &tcp_nodelay, sizeof(int))
             == -1)
         {
-            ngx_connection_error(c, ngx_socket_errno,
-                                 "setsockopt(TCP_NODELAY) failed");
+            err = ngx_socket_errno;
+
+#if (NGX_SOLARIS)
+            /* Solaris returns EINVAL if a socket has been shut down */
+
+            if (err != NGX_EINVAL)
+#endif
+                ngx_connection_error(c, err, "setsockopt(TCP_NODELAY) failed");
+
             ngx_http_close_connection(c);
             return;
         }


More information about the nginx-ru mailing list