ПРОЕКТЫ 


  АРХИВ 


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[2]: поддержка HTTP/1.1 для проксирования



On Wed, 29 Dec 2004, Alexander Popkov wrote:

> R> Вот следующая строка появлется регулярно при всех запросах:
>
> R> 2004/12/27 20:09:05 [debug] 8507#0: *1 readv() not ready (11: Resource
> R> temporarily unavailable)
>
> R> Это нормально ?
>
> При non-blocking io это нормально. Просто система либо дает
> прочитать/записать в сокет, либо отлуп с ошибкой
> "Resource temporarily unavailable", тоесть сокет еще не готов к
> операции чтения или записи, тоесть данные от клиента еще не пришли,
> или буфер для передачи данных клиенту еще не освободился для следующей
> порции данных. Потом просто выставляется event на этот сокет через
> выбранный способ мультиплексирования, и ожидается когда система подаст
> сигнал, что этот сокет уже готов к нужной операции.
>
> А на всякий случай (вдруг когда сервер начнет обрабатывать новое
> соединение, первая порция данных уже от клиента прийдет, тогда не
> надо ждать пока система уведомит о готовности сокета, а можно сразу
> попытаться прочесть), видимо так и сделано в nginx, просто такая
> ситуация довольно редкая - вот и получается почти каждый раз отлуп.

Да, для non-blocking io "Resource temporarily unavailable" - это
обычная ошибка.

В Солярисе select, poll и /dev/poll иногда может возвращть ложную готовность
сокета, тогда операция ввода/вывода вернёт "Resource temporarily unavailable".

При использовании kqueue она должна возникать очень редко - по крайней мере,
я не видел ложных срабатываний. Кроме того, в kqueue есть возможность узнать
количество готовых данных и конец потока и это позволяет экномить системные
вызовы.

А вот при использовании epoll и rtsig после каждой операции ввода/вывода
приходится делать ещё одну такую же операцию, чтобы убедиться, что данных
больше нет и нет конца потока, потому что epoll и rtsig в отличие от kqueue
могут не вернуть сообщения о готовности данных.


Игорь Сысоев
http://sysoev.ru




 




Copyright © Lexa Software, 1996-2009.