The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Вышла новая экспериментальная версия nginx 0.7.7.

30.07.2008 23:44

"nginx 0.7.7" - вышла новая экспериментальная версия nginx 0.7.7. Список изменений:

  • Изменение: теперь ошибка 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.


  1. Главная ссылка к новости (http://sysoev.ru/nginx/changes...)
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/17187-nginx
Ключевые слова: nginx
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (5) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, parad (??), 11:48, 31/07/2008 [ответить]  
  • +/
    > Изменение: теперь ошибка EAGAIN при вызове connect() не считается временной.

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

     
     
  • 2.2, csdoc (ok), 13:27, 31/07/2008 [^] [^^] [^^^] [ответить]  
  • +/
    >> Изменение: теперь ошибка EAGAIN при вызове connect() не считается временной.
    >
    > На неблокируемых сокетах - это стандартная ошибка,
    > возвращаемая при вызове connect(), потом нужно проверять
    > готовнось сокета на запись, а по достижению таймаута отрубать.
    >
    > В общем как это они так?

    в POSIX при вызове connect() на неблокируемых
    сокетах возвращается EINPROGRESS, а не EAGAIN.
    EAGAIN вместо EINPROGRESS возвращает только Windows.

    POSIX connect: http://www.opengroup.org/onlinepubs/000095399/functions/connect.html

    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

     
     
  • 3.3, parad (??), 17:37, 31/07/2008 [^] [^^] [^^^] [ответить]  
  • +/
    Ок, спасибо, кажется я что-то напутал. ))
     

  • 1.4, Аноним (4), 13:05, 01/08/2008 [ответить]  
  • +/
    > Изменение: теперь ошибка EAGAIN при вызове connect() не считается временной.

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

     
     
  • 2.5, csdoc (ok), 13:28, 01/08/2008 [^] [^^] [^^^] [ответить]  
  • +/
    >> Изменение: теперь ошибка EAGAIN при вызове connect() не считается временной.
    >
    > А зачем серверу вызывать connect() ?

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

     

  • 1.6, BigBug (?), 11:39, 08/07/2009 [ответить]  
  • +/
    > -  Изменение: теперь ошибка EAGAIN при вызове connect() не считается
    >временной.

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

     
     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру