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