работа в сети — асинхронное разрешение имени C ++

У меня есть сервер epoll, который иногда открывает исходящие соединения, используя представление их имен хостов. Из-за высокой скорости потока входящих соединений я не хочу блокировать где-то getaddrinfo() или же gethostbyname(), Конечно, я мог бы реализовать кеш плюс новый поток, где будет выполняться разрешение имени хоста. Существует ли однопоточный неблокирующий способ преобразования имени хоста в IP?

1

Решение

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

Я вроде как согласен с @Puciek, хотя, выполнение этого в одном потоке добавляет немного сложности для сомнительных преимуществ. Использование выделенного потока разрешения и связь с ним по каналам может быть лучшим решением.

Поскольку вы упоминаете epoll Я полагаю, вы используете Linux. Оно имеет getaddrinfo_a Функция, которая, если я правильно понимаю, делает часть этого для вас. Он клонирует поток и запускает там getaddrinfo. Я никогда не использовал это, хотя так не могу помочь кроме этого.

1

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


По вопросам рекламы [email protected]