ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: open socket #103 left in 2 connection



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
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;
         }


 




Copyright © Lexa Software, 1996-2009.