Nginx-ru mailing list archive (nginx-ru@sysoev.ru)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: ошибка в nginx ?
- To: Igor Sysoev <nginx-ru@xxxxxxxxx>
- Subject: Re: ошибка в nginx ?
- From: Gena Makhomed <gmm@xxxxxxxxx>
- Date: Fri, 11 Jul 2008 02:02:24 +0300
- Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=csdoc.com; s=dkim; t=1215731726; bh=9BYGV/bkP6u0GFJ28TXaVokjkCHZ49dGsBcerYe/Vfo=; h=Date:From:X-Mailer:X-Priority:Message-ID:To:Subject:In-Reply-To: References:MIME-Version:Content-Type:Content-Transfer-Encoding; b=H5SJbDWPdzPcGyyN70asRLrS9Zb2V1/R+wtB6h74P3PdODt31HPOrpT2uTJsIcjIw CIWk6FSXYIU3wmiQJ6zUR6+bGMez4aCklCMhZFQQanDVHsV/YCrLZwEjeATE6YChJB3 KyaBy82112j7Do/HVX3A0YJlrj57Dbc2CBpK124=
- In-reply-to: <20080708171344.GD50059@xxxxxxxxxxxxx>
- References: <68978892.20080708195713@xxxxxxxxx> <20080708171344.GD50059@xxxxxxxxxxxxx>
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
|