Crit error: setsockopt(TCP_NODELAY) failed

Alexey Rymonin x-phoenix at mail.ru
Thu Aug 16 09:59:52 MSD 2007


Hello Igor,

Thursday, August 16, 2007, 12:21:23 AM, you wrote:

> On Wed, Aug 15, 2007 at 08:47:24PM +0400, Alexey Rymonin wrote:

>>    2007/08/15 09:21:36 [crit] 3725#0: *364930 setsockopt(TCP_NODELAY)
>>    failed (22: Invalid argument) while keepalive, client: 89.207.94.130

> Если клиент закрыл соединение, то по идее, должно быть что-то вроде
> Connection reset by peer или Socket is not connected, хотя, возможно,
> в Солярисе и по-другому.

Единственное, что я нашел еще это
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6378870
Интерес там представляет следующее
On Solaris the setsockopt(3SOCKET) call returns EINVAL when the connection is reset.

А вообще у нее такие ошибки:

ERRORS
     The getsockopt() and setsockopt() calls succeed unless:

     EBADF                   The argument s is not a  valid  file
                             descriptor.

     ENOMEM                  There was insufficient memory avail-
                             able for the operation to complete.

     ENOPROTOOPT             The option is unknown at  the  level
                             indicated.

     ENOSR                   There  were   insufficient   STREAMS
                             resources  available  for the opera-
                             tion to complete.

     ENOTSOCK                The argument s is not a socket.

     ENOBUFS                 SO_SNDBUF  or  SO_RCVBUF  exceeds  a
                             system limit.

     EINVAL                  Invalid length for IP_OPTIONS.

     EHOSTUNREACH            Invalid address for IP_MULTICAST_IF.

     EINVAL                  Not   a   multicast   address    for
                             IP_ADD_MEMBERSHIP                and
                             IP_DROP_MEMBERSHIP.

     EADDRNOTAVAIL           Bad    interface     address     for
                             IP_ADD_MEMBERSHIP                and
                             IP_DROP_MEMBERSHIP.

     EADDRINUSE              Address    already    joined     for
                             IP_ADD_MEMBERSHIP.

     ENOENT                  Address     not      joined      for
                             IP_DROP_MEMBERSHIP.

     EPERM                   No permissions.

     EINVAL                  The specified option is  invalid  at
                             the  specified  socket level, or the
                             socket has been shut down.


К сожалению не могу сказать, отличаются ли они от стандартных, но в
линухе у меня список гораздо короче...
                             
> Возможно, это ошибка в nginx'е, а, может быть, в - Солярисе. У Соляриса
> есть проблемы с sendfilev() и event ports, так что вполне могут быть
> и здесь.

Я пока на /dev/poll сижу, так как event ports у меня что-то очень
таращило. Все время что-то не дозагружалось.... Но вроде как event ports стали совершенно нормально
работать после того, как я поправил маленький косяк в ipf, связанный с
ошибкой при использовании keep state... косяк был очень противный, так
как проявлялся не всегда, а только при определенных
последовательностях открытия соединения.... Вроде все открывалось, в
таблицы состояний все записывалось, но через некоторое время по half
close соединение закрывалось в одну сторону и все... Причем, что самое
забавное, это появилось после того как я поставил патч на ipf
(125015-03, по умолчанию в u3 идет 125015-00), который
исправил работу закрытия по half close (раньше он просто его по
half вообще не закрывал)...

> Уровень crit - потому что ошибка необычна и на неё стоит обратить внимание.

Ясно....



-- 
Best regards,
 Alexey                            mailto:x-phoenix at mail.ru






More information about the nginx-ru mailing list