Мониторинг дескрипторов сокетов

У меня есть приложение, в котором одновременно открыто много дескрипторов сокетов. Я хочу отслеживать их только на предмет активности и закрыть дескриптор, который какое-то время не видел активности. У меня есть некоторые решения, но я не уверен, можно ли это сделать с помощью правила брандмауэра или нет. Я не хочу тратить свои усилия на то, что может быть достигнуто с помощью какой-либо системной службы или конфигурации.

Это должно быть сделано на основе системы Linux.

Решение, которое я имею в виду, — это использовать timerfd_create и использовать таймеры в дескрипторах для мониторинга всех активных сокетов. Любое предложение для достижения этого в лучшем случае будет полезно. Заранее спасибо.

-1

Решение

использование select() контролировать розетки, есть пример в конце человека страница. По сути, вы добавляете файловые дескрипторы к fd_set и позвонить select() он возвращается, когда один из отслеживаемых файловых дескрипторов может быть прочитан или записан, или если вы установите тайм-аут, вы можете затем использовать select с небольшим тайм-аутом, чтобы проверить fd в обратном вызове таймера и закрыть те, которые не готовы.

0

Другие решения

Я использовал API-интерфейсы timerfd_create и timerfd_settime в файле timerfd.h. Другим вариантом обнаружения закрытого сокета был тайм-аут keep_alive в sysconf. Тайм-аут keep_alive не сильно помог в случае, если сокет был жив, но не выполнял никаких действий, поэтому пришлось использовать более раннюю опцию.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector