gethostbyname(), gethostbyname2()

Получить запись о сетевом узле по имени

Прототип:

#include <netdb.h>
struct hostent * gethostbyname( const char *name );
struct hostent * gethostbyname2( const char *name,
int af );

Аргументы:

name
Имя интернет-хоста, запись которого требуется найти.
af
(только для gethostbyname2()) Семейство адресов; одно из следующих:

Библиотека:

libsocket

Описание:

Процедура gethostbyname() получает запись сетевого хоста для данного имени. Она возвращает указатель на структуру struct hostent, описывающую Интернет-хост. Эта структура содержит либо информацию, полученную от сервера имен, либо отдельные поля из строки в /etc/hosts.


Note: И gethostbyaddr() и gethostbyname() помечены как устаревшие в POSIX 1003.1. Рекомендуется использовать getaddrinfo() или getnameinfo().

При использовании сервера имен gethostbyname() ищет данный хост в текущем домене и в родительских доменах, если имя не заканчивается точкой.


Note:
  • Если сервер имен не отвечает, предусмотрен таймаут в 1,5 минуты.
  • Если имя не содержит точки, а переменная среды HOSTALIASES содержит имя файла псевдонима, в файле псевдонима сначала выполняется поиск псевдонима, соответствующего входному имени. Этот файл имеет ту же форму, что и /etc/hosts.

Можно использовать sethostent(), чтобы потребовать использование подключенного TCP-сокета для запросов. Если флаг stayopen не равен нулю, все запросы к серверу имен будут использовать TCP, и соединение будет сохраняться после каждого вызова gethostbyaddr() или gethostbyname(). Если флаг stayopen равен нулю, запросы будут использовать UDP датаграммы.

Функция gethostbyname2() является улучшенной версией функции gethostbyname() и позволяет искать имена хостов в семействе адресов, отличных от AF_INET. При указании недопустимого семейства адресов, функция вернет NULL и установит h_errno в NETDB_INTERNAL.

Возвращаемое значение:

Указатель на корректную структуру struct hostent. Если возникла ошибка функция возвращает NULL, код ошибки записывается в errno.

Коды ошибок:

См. herror().

Файлы:

/etc/hosts
Файл, содержащий базу данных доменных имен.
/etc/nsswitch.conf
Конфигурационный файл для выбора соответствующей службы имен.

Для получения информации об этих файлах, обратитесь к Справочнику по Утилитам.

Переменные окружения:

HOSTALIASES
Имя файла псевдонима, который gethostbyname() должен искать в первую очередь, если имя хоста не содержит точки.

Классификация:

gethostbyname() — POSIX 1003.1 OBS; gethostbyname2() — ЗОСРВ «Нейтрино»

Точка остановки потока
Да
Обработчик прерываний
Нет
Обработчик сигналов
Нет
В потоке
Нет

Предостережения:

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

Тематические ссылки:

endhostent(), getaddrinfo(), gethostbyaddr(), gethostbyname_r(), gethostent(), getnameinfo(), herror(), struct hostent, sethostent()

/etc/hosts, /etc/nsswitch.conf в Справочнике по Утилитам




Предыдущий раздел: Описание API сетевой библиотеки