ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
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




 




Copyright © Lexa Software, 1996-2009.