gethostbyname_r()

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

Прототип:

#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
struct hostent * gethostbyname_r( const char *name,
struct hostent *result,
char *buffer,
int bufflen,
int *h_errnop );

Аргументы:

name
Имя интернет-хоста, запись которого требуется найти.
result
Указатель на struct hostent, где функция может хранить запись хоста.
buffer
Указатель на буфер, который функция может использовать во время операции для хранения записей базы данных хоста; buffer должен быть достаточно большим, чтобы вместить все данные, связанные с записью хоста. Буфера, размером 2 КБ обычно более чем достаточно; 256-байтовый буфер в большинстве случаев безопасен.
buflen
Размер буфера buffer.
h_errnop
Указатель на область памяти, где функция может сохранить значение h_errno в случае возникновения ошибки.

Библиотека:

libsocket

Описание:

Функция gethostbyname_r() является потокобезопасной версией gethostbyname(). Данная функция получает запись о сетевом хосте для хоста, указанного в name, и сохраняет запись в struct hostent, на которую указывает result.

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

Указатель на структуру struct hostent или NULL в случае ошибки.

Коды ошибок:

В случае возникновения ошибки, int, на которую указывает h_errnop устанавливается в:

ERANGE
Предоставленный buffer не может вместить результат.
HOST_NOT_FOUND
Ответ, полученный непосредственно от сервера, который располагает информацией об указанном домене: неизвестный хост.
NO_ADDRESS
Нет адреса, связанного с именем; необходимо найти запись MX.
NO_DATA
Допустимое имя, однако отсутствует запись данных запрошенного типа. Имя известно серверу имен, но с ним не связан IP-адрес - это не является временной ошибкой. Другой тип запроса к серверу имен с использованием этого доменного имени даст ответ (например, для этого домена может быть зарегистрирован почтовый сервер пересылки).
NO_RECOVERY
Неизвестная ошибка сервера. Произошел непредвиденный сбой сервера. Неисправимая сетевая ошибка.
TRY_AGAIN
Ответ, полученный от промежуточного сервера: Ошибка поиска имени хоста. Обычно это временная ошибка и означает, что локальный сервер не получил ответа от полномочного сервера. Повторная попытка через некоторое время может быть успешной.

Файлы:

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

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

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

Unix

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

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

struct hostent, gethostbyaddr(), gethostbyaddr_r(), gethostbyname()

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




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