2012-06-05 1 views
0

У меня есть сетевая клиентская библиотека, которую я собираю, которая читает/записывает в некоторые сетевые сокеты.Отличительные типы дескрипторов файлов в epoll

Существует один поток, который выполняет сетевой ввод-вывод и отвечает на запросы от открытого клиентского API. Эти клиентские запросы API должны быть выведены из очереди FIFO.

Для того, чтобы поток получил запрос, когда мой основной цикл заблокирован на epoll_wait Я думаю, что я должен использовать eventfd, который я могу добавить с помощью epoll_ctl.

Итак, вопрос в том, как я могу различать событие, перенесенное в мою очередь FIFO и сетевой ввод-вывод, если epoll просто уведомляет EPOLLIN?

EDIT: Я должен добавить, что я не хочу хранить событие fd в элементе данных, а скорее использовать член ptr. Полагаю, мне нужно сохранить fd где-то внутри этой структуры.

Могу ли я просто проверить, не вызвано ли инициируемое событие = мой файловый дескриптор событий и, следовательно, читать из моего fifo, а если оно не равно, то это должно быть сетевое событие? Это безопасно? или существует оптимальный подход.

ответ

0

Да, вы должны сравнить файловые дескрипторы. Пример в manual page делает это.

+0

Спасибо, не знаю, как я пропустил это. Сейчас кажется очевидным – Matt