Как делает getaddrinfo (), делают поиск DNS?

getaddrinfo () является функцией, которую мы должны использовать прежде, чем создать сокет () или подключение () луг, правильно? Тогда, как getaddrinfo связывается с сервером DNS во-первых?

PS: Где я могу видеть полный источник getaddrinfo?

22
задан n00b2000 28 January 2010 в 20:05
поделиться

5 ответов

Есть ли в вашей Unix-системе файл /etc/nsswitch.conf? Если да, то запись "hosts" дает порядок поиска для преобразования имен хостов в IP-адреса. Есть ли в вашей системе файл /etc/resolv.conf? Если да, то он указывает, какие DNS-серверы использовать.

Как видите, функция getaddrinfo() может сделать довольно много (и может занять некоторое время)!

8
ответ дан 29 November 2019 в 05:26
поделиться

Нет необходимости вызывать getaddrinfo() перед созданием сокета или соединением. Она используется для перевода доменного имени, такого как stackoverflow.com, на IP-адрес, такой как 69.59.196.211. Если вы знаете IP-адрес, то вы можете подключиться непосредственно к этому адресу, и нет необходимости использовать getaddrinfo(). getaddrinfo() использует протокол DNS для связи с вашими серверами имен, которые настроены с использованием их IP адреса.

Исходный код glibc здесь .

10
ответ дан 29 November 2019 в 05:26
поделиться

getaddrinfo() скорее всего сделает вызов connect() за кулисами, однако он уже знает IP-адрес DNS-сервера, с которым он должен соединиться, чтобы сделать запрос на адрес хоста, который вы просите его запросить.

getaddrinfo() требуется только в том случае, если вы хотите сопоставить "www.somehost.com" с IP-адресом, он не нужен в качестве праймера для вызова connect().

Вероятно, вы можете найти полный исходный код для getaddrinfo() в исходниках glibc, которые вы сможете найти здесь (среди прочих мест).

Надеюсь, это прояснит вам ситуацию.

1
ответ дан 29 November 2019 в 05:26
поделиться

Короткий ответ: " он запрашивает систему", который, в свою очередь, знает, как делать DNS поиск и какие серверы использовать.

getaddrinfo() документируется страницей руководства getaddrinfo(3), что означает, что это функция библиотеки Си. Это также POSIX функция, так что нет никакого канонического "исходного текста"; каждая стандартная библиотека Си операционной системы, которая соответствует POSIX, реализует свою собственную версию. В любом случае исходный текст только этой функции, вероятно, не слишком поучительен, так как он будет просто вызывать другие функции и API операционной системы, и вам придётся довольно далеко углубиться, чтобы добраться до реального механизма DNS. Лучше прочитать документацию по самому протоколу DNS, если вам интересно, как он работает.

9
ответ дан 29 November 2019 в 05:26
поделиться

Используется протокол DNS (UDP) http://www.freesoft.org/cie/topics/77.htm

-1
ответ дан 29 November 2019 в 05:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: