gethostbyaddr_r()

Получить запись сетевого хоста потоко-безопасным способом

Прототип:

#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
struct hostent * gethostbyaddr_r( const void *addr,
socklen_t length,
int type,
struct hostent *result,
char *buffer,
int buflen,
int *h_errnop );

Аргументы:

addr
Указатель на адрес в двоичном формате (т.е. не оканчивающийся NULL) в сетевом порядке байт.
length
Длина addr в байтах.
type
Тип адреса. В настоящее время должен быть AF_INET.
result
Указатель на struct hostent, где функция может хранить запись хоста.
buffer
Указатель на буфер, который функция может использовать во время операции для хранения записей базы данных хоста; buffer должен быть достаточно большим, чтобы вместить все данные, связанные с записью хоста. Буфера, размером 2 КБ обычно более чем достаточно; 256-байтовый буфер в большинстве случаев безопасен.
buflen
Размер буфера buffer.
h_errnop
Указатель на область памяти, где функция может сохранить значение h_errno в случае возникновения ошибки.

Библиотека:

libsocket

Описание:

Функция gethostbyaddr_r() является потокобезопасной версией gethostbyaddr(). Данная функция получает запись о сетевом хосте для хоста, указанного в addr. Аргумент addr - сетевой адрес указанного сетевого семейства type. Буфер для addr имеет рамер не меньше чем length байт.

Если требуется преобразовать текстовый адрес в формат, необходимый для использования в качестве addr для gethostbyaddr_r(), см. inet_pton().

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

Указатель на структуру 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(), gethostbyname(), gethostbyname_r(), inet_ntop(), inet_pton()

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




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