Получить запись о сетевом узле по имени
#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 сетевой библиотеки