Re[2]: поддержка HTTP/1.1 для проксирования

Igor Sysoev is at rambler-co.ru
Wed Dec 29 13:35:00 MSK 2004


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





More information about the nginx-ru mailing list