FreeBSD + Kqueue/Poll + Libevent

urri nginx-forum на nginx.us
Пт Авг 19 22:56:03 UTC 2011


Alexandr Gomoliako Wrote:
> Нет, это же вы писали вроде, что nginx
закрывает соединение while
> reading response header. А это значит, что запрос
уже давным давно
> отправлен и nginx уже ждет ответа.

Именно так, nginx отправил запрос, это я
проверял снифером, и ждет ответа.

> Скорее всего этот запрос уже даже
прочитан в буфер вашим сервером, но
> где-то у вас ошибка, что ему кажется,
что нужно больше данных и он
> опять ждет.
> Но раз вы используете http функции libevent,
то ошибка наверное в них.

Нет, запрос принят ОС на транспортном
уровне, снифер это подтверждает, но
данные не поступили на прикладной
уровень, где libevent будет парсить http
запрос. Я логирую вызовы libevent,
конкретно вызов kq_dispatch, в котором libevent
получает от Kqueue сокеты с которых можно
считать данные. И Kqueue не возращает в
libevent эти проблемные сокеты пока nginx не
закроет соединение, а возвращает как
только соединение закрывается, далее
libevent считывает данные и начинает
парсить http.

Собственно мой вопрос был: почему Kqueue
может не возвращать сокет приложению
для чтения данных, хотя известно что
данные ОС для данного соединения уже
получила.

Posted at Nginx Forum: http://forum.nginx.org/read.php?21,213985,214055#msg-214055



Подробная информация о списке рассылки nginx-ru