"nginx 0.7.7 (http://sysoev.ru/nginx/changes.html)" - вышла новая экспериментальная версия nginx 0.7.7 (http://sysoev.ru/nginx/). Список изменений:- Изменение: теперь ошибка EAGAIN при вызове connect() не считается временной.- Изменение: значением переменной $ssl_client_cert теперь является сертификат, перед каждой строкой которого, кроме первой, вставляется символ табуляции; неизменённый сертификат доступен через переменную $ssl_client_raw_cert.
- Добавление: параметр ask директивы ssl_verify_client.
- Добавление: улучшения в обработке byte-range.
- Добавление: директива directio.
- Добавление: поддержка sendfile() в MacOSX 10.5.
- Исправление: в MacOSX и Cygwin при проверке location'ов теперь делается сравнение без учёта регистра символов; однако, сравнение ограничено только однобайтными locale'ями.
- Исправление: соединения почтового прокси-сервера зависали в режиме SSL, если использовались методы select, poll или /dev/poll.
- Исправление: ошибки при использовании кодировки UTF-8 в ngx_http_autoindex_module.
URL: http://sysoev.ru/nginx/changes.html
Новость: https://www.opennet.ru/opennews/art.shtml?num=17187
> Изменение: теперь ошибка EAGAIN при вызове connect() не считается временной.На неблокируемых сокетах - это стандартная ошибка, возвращаемая при вызове connect(), потом нужно проверять готовнось сокета на запись, а по достижению таймаута отрубать. В общем как это они так?
>> Изменение: теперь ошибка EAGAIN при вызове connect() не считается временной.
>
> На неблокируемых сокетах - это стандартная ошибка,
> возвращаемая при вызове connect(), потом нужно проверять
> готовнось сокета на запись, а по достижению таймаута отрубать.
>
> В общем как это они так?в POSIX при вызове connect() на неблокируемых
сокетах возвращается EINPROGRESS, а не EAGAIN.
EAGAIN вместо EINPROGRESS возвращает только Windows.POSIX connect: http://www.opengroup.org/onlinepubs/000095399/functions/conn...
WINSOCK connect: http://msdn.microsoft.com/en-us/library/ms737625(VS.85).aspx
nginx-0.7.7\src\event\ngx_event_connect.c:
if (err != NGX_EINPROGRESS
#if (NGX_WIN32)
/* Winsock returns WSAEWOULDBLOCK (NGX_EAGAIN) */
&& err != NGX_EAGAIN
#endif
)
{
if (err == NGX_ECONNREFUSED
#if (NGX_LINUX)
/*
* Linux returns EAGAIN instead of ECONNREFUSED
* for unix sockets if listen queue is full
*/
|| err == NGX_EAGAIN
#endifв случае если Linux возвращает EAGAIN - это действительно ошибка,
соединение не было установлено. для пользовательского приложения
это означает примерно то же самое, что и код ошибки ECONNREFUSED.http://lxr.linux.no/linux/net/unix/af_unix.c#L1070
1070 if (skb_queue_len(&other->sk_receive_queue) >
1071 other->sk_max_ack_backlog) {
1072 err = -EAGAIN;
1073 if (!timeo)
1074 goto out_unlock;более подробная информация на эту тему:
http://www.google.com/search?q=non-blocking+connect+and+EAGAIN
Ок, спасибо, кажется я что-то напутал. ))
> Изменение: теперь ошибка EAGAIN при вызове connect() не считается временной.А зачем серверу вызывать connect() ?
>> Изменение: теперь ошибка EAGAIN при вызове connect() не считается временной.
>
> А зачем серверу вызывать connect() ?для подключения к backend`ам. (fastcgi, http и т.п.)
> - Изменение: теперь ошибка EAGAIN при вызове connect() не считается
>временной.ЙЭССССССССССССС, этот баг таки признали и исправили, теперь можно использовать высоконагруженные бекэнды через unix сокет и небоятся что в какойто момент очередь переполнится и сразу всем будет выдана ошибка 502 вместо ожидания!!! Этот баг очень доставал!