У меня есть сервер epoll, который иногда открывает исходящие соединения, используя представление их имен хостов. Из-за высокой скорости потока входящих соединений я не хочу блокировать где-то getaddrinfo()
или же gethostbyname()
, Конечно, я мог бы реализовать кеш плюс новый поток, где будет выполняться разрешение имени хоста. Существует ли однопоточный неблокирующий способ преобразования имени хоста в IP?
Для этой цели существуют различные библиотеки, например, libevent
содержит резольвер.
Я вроде как согласен с @Puciek, хотя, выполнение этого в одном потоке добавляет немного сложности для сомнительных преимуществ. Использование выделенного потока разрешения и связь с ним по каналам может быть лучшим решением.
Поскольку вы упоминаете epoll
Я полагаю, вы используете Linux. Оно имеет getaddrinfo_a
Функция, которая, если я правильно понимаю, делает часть этого для вас. Он клонирует поток и запускает там getaddrinfo. Я никогда не использовал это, хотя так не могу помочь кроме этого.