вторник, 24 марта 2009 г.

Асинхронный ввод/вывод с libevent

Один из проектов, которым я сейчас занимаюсь, для работы с сокетами использует механизм kqueue. Мне необходимо модифицировать бизнес-логику, часть которой захватывает отправку отправку ответа, но поскольку некоторые данные приходится модифицировать непосредственно перед отправкой, код обработки события EVFILT_WRITE сильно размазался.
Я решил перенести сетевой асинхронный ввод/вывод на библиотеку libevent. На официальном сайте есть неплохая документация в Doxygen и скудненький пример, который оказался не совсем рабочим: событие EV_READ срабатывает постоянно.
Собрал на FreeBSD 6.2, 6.3, 7.0 – баг повторяется. Чтоб событие отрабатывалось корректно и вовремя, очередь надо открывать с правами O_RDWR, а не с O_RDONLY.

1 комментарий:

T-Rex комментирует...

Ты б лучше рассказал что за библиотека это и почему она "спасет отца русской демократии". Вот мне она зачем может понадобиться? вдруг она мне качественно жизнь улучшит, а я об этом не заню.