гетаддринфо с AI_NUMERICHOST - PullRequest
       13

гетаддринфо с AI_NUMERICHOST

2 голосов
/ 21 марта 2019

Функция POSIX getaddrinfo() используется для выполнения разрешения DNS, а также разрешения имени службы. Аргумент hints, переданный getaddrinfo(), имеет поле флагов, ai_flags.

Среди возможных значений флага: AI_NUMERICHOST. Согласно документации , это информирует getaddrinfo(), что строка имени хоста является IP-адресом. Поскольку имя хоста уже является IP-адресом (в отличие от имени хоста), разрешение DNS не требуется.

У меня проблемы с пониманием цели или варианта использования этого флага. Если у вас уже есть IP-адрес, зачем вам вообще звонить getaddrinfo()? Единственная возможная цель, которую я мог видеть, - это случай, когда у вас уже есть IP-адрес, но вы просто хотите получить имя службы. Но в этом случае вы могли бы просто позвонить getservbyname() напрямую, что было бы намного проще.

Единственное, о чем я могу думать, это то, что getaddrinfo() является вновь входящим, тогда как, очевидно, getservbyname() не является вновь входящим. Итак, является ли цель флага AI_NUMERICHOST просто в том, чтобы обеспечить обходной способ сделать потокобезопасным getservbyname()?

Если нет, то какова цель AI_NUMERICHOST?

1 Ответ

2 голосов
/ 21 марта 2019

Основное использование getaddrinfo с AI_NUMERICHOST должно быть заменой IPv4 / IPv6-агностиком для inet_aton и inet_pton.То есть он принимает текстовые адреса IPv4 и IPv6 и преобразует их в sockaddr объекты;вызывающий код не должен знать, что есть какой.

Это также верно, что вы можете использовать его как поточно-ориентированный getservbyname, но я не могу вспомнить, когда в последний раз видел код, который не не использовал AI_NUMERICSERV, поэтому я не думаю, что это важное свойство.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...