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