Re: ошибка в nginx ?

Gena Makhomed gmm at csdoc.com
Fri Jul 11 03:02:24 MSD 2008


On Tuesday, July 8, 2008 at 20:13:44, Igor Sysoev wrote:

>> вот в этом сообщении Andrei Nigmatulin говорит об ошибке в nginx:
>> http://groups.google.com/group/highload-php-ru/msg/a5a2883173f56f5d

>> но в changelog`е не нашел никаких упоминаний на эту тему.
>> эта ошибка в nginx сейчас так и осталась не исправленной?

IS> На данный момент, судя по
IS> http://www.ruby-forum.com/topic/132314
IS> я вижу только ошибку в ядре.

почему это именно ошибка в ядре? в POSIX стандарте на функцию connect
http://www.opengroup.org/onlinepubs/000095399/functions/connect.html

не написано что делать в случае переполнения backlog`а.
есть только вот такое описание возвращаемых кодов ошибок:

========================================================================================

ERRORS

    The connect() function shall fail if:

[ECONNREFUSED]
The target address was not listening for connections or refused the connection request. 

========================================================================================

[ECONNREFUSED] - это "refused request", когда ситуация persistent fail
на стороне сервера - "target address was not listening for connections",
или что-то не так с клиентским запросом - "or refused the connection request"

а переполнение backlog - это ситуация temporary fail
на стороне сервера, и поэтому возвращается [EAGAIN]?

[EINPROGRESS] в этом случае отправлять не выходит,
потому что тогда - "the connection request
shall not be aborted, and the connection
shall be established asynchronously".

IS> В чём причина EAGAIN

насколько удалось понять из исходников ядра Linux,
http://lxr.linux.no/linux/net/unix/af_unix.c#L1070

Linux всегда (2.2.6 - 2.6.25.10) возвращает EAGAIN
при неблокирующем коннекте и переполнении backlog.

IS> и что делать при его получении - непонятно.

http://www.issociate.de/board/post/456462/non-blocking_connect_and_EAGAIN.html

From: Vladimir Shebordaev

The comment in the net/unix/af_unix.c prologue states as to AF_UNIX
connect(), for performance and (very) old BSD compatibility
reasons the current behavior is intentional and not to be fixed
until checked against POSIX requirements. I also think proper
change would break some (very important) existing applications
since the relevant code - the one that aborts non-blocking
connection with EAGAIN - lives there since 2.2.6 at least.

[...]

дальше том в сообщении он детально рассматривает
как работает код функции unix_stream_connect()

-- 
Best regards,
 Gena






More information about the nginx-ru mailing list