URL: https://www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID3
Нить номер: 43113
[ Назад ]

Исходное сообщение
"OpenNews: Вышла новая экспериментальная версия nginx 0.7.7."

Отправлено opennews , 31-Июл-08 11:48 
"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


Содержание

Сообщения в этом обсуждении
"Вышла новая экспериментальная версия nginx 0.7.7."
Отправлено parad , 31-Июл-08 11:48 
> Изменение: теперь ошибка EAGAIN при вызове connect() не считается временной.

На неблокируемых сокетах - это стандартная ошибка, возвращаемая при вызове connect(), потом нужно проверять готовнось сокета на запись, а по достижению таймаута отрубать. В общем как это они так?


"Вышла новая экспериментальная версия nginx 0.7.7."
Отправлено csdoc , 31-Июл-08 13:27 
>> Изменение: теперь ошибка 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


"Вышла новая экспериментальная версия nginx 0.7.7."
Отправлено parad , 31-Июл-08 17:37 
Ок, спасибо, кажется я что-то напутал. ))

"Вышла новая экспериментальная версия nginx 0.7.7."
Отправлено Аноним , 01-Авг-08 13:05 
> Изменение: теперь ошибка EAGAIN при вызове connect() не считается временной.

А зачем серверу вызывать connect() ?


"Вышла новая экспериментальная версия nginx 0.7.7."
Отправлено csdoc , 01-Авг-08 13:28 
>> Изменение: теперь ошибка EAGAIN при вызове connect() не считается временной.
>
> А зачем серверу вызывать connect() ?

для подключения к backend`ам. (fastcgi, http и т.п.)


"OpenNews: Вышла новая экспериментальная версия nginx 0.7.7."
Отправлено BigBug , 08-Июл-09 11:39 
> -  Изменение: теперь ошибка EAGAIN при вызове connect() не считается
>временной.

ЙЭССССССССССССС, этот баг таки признали и исправили, теперь можно использовать высоконагруженные бекэнды через unix сокет и небоятся что в какойто момент очередь переполнится и сразу всем будет выдана ошибка 502 вместо ожидания!!! Этот баг очень доставал!