Обычный способ приема соединений в проактивном веб-сервере (с использованием асинхронного ввода-вывода) - PullRequest
0 голосов
/ 25 мая 2011

В настоящее время я изучаю aio на linux, чтобы использовать его для реализации веб-сервера. Как я уже обнаружил, не так много ресурсов, которые подробно описывают использование aio.

Вопрос в том, каков обычный способ приема клиентских подключений в однопоточном приложении, использующем aio? (с минимальной возможной блокировкой)

В идеале я вижу, как операция aio_accept отправляет уведомление (вызов функции обратного вызова в моем случае), что соединение установлено и aio_read вызывается сразу внутри обработчика. Но такого звонка нет: (

Спасибо!

1 Ответ

1 голос
/ 25 мая 2011

Я не думаю, что aio работает с предварительно принимаемыми сокетами.

Возможно, вы захотите выбрать их или получить SIGIO, когда он будет готов.

[править]

В частности, на странице руководства написано: «Устройство, на котором открыт файл, должно разрешать операцию поиска. То есть, невозможно использовать какие-либо операции AIO на устройствах, таких как терминалы, где lseek вызов приведет к ошибке. "

Сокеты не разрешают операцию поиска, поэтому даже сокеты после приема могут показаться неудачными.

...