getipnodebyname, getipnodebyaddr, freehostent - получают сетевые имена и адреса машины
СИНТАКСИС
#include <sys/types.h>#include <sys/socket.h>#include <netdb.h>struct hostent *getipnodebyname(const char *name, int af, int flags, int *error_num);struct hostent *getipnodebyaddr(const void *addr, size_t len, int af, int *error_num);void freehostent(struct hostent *ip);
Функции
getipnodebyname(3)
и
getipnodebyaddr(3)
возвращают имена и адреса машины в сети. Эти функции возвращают указатель на
следующую структуру:
struct hostent { char *h_name; char **h_aliases; int h_addrtype; int h_length; char **h_addr_list;};
Эти функции заменяют друг на друга функции
gethostbyname(3)
и
gethostbyaddr(3),
которые могут осуществлять доступ только к семейству адресов IPv4.
Функции
getipnodebyname(3)
и
getipnodebyaddr(3)
могут осуществлять доступ к нескольким семействам сетевых адресов.
В отличие от функций
gethostby
эти функции возвращают указатели на динамически выделяемую память.
Функция
freehostent(3)
используется для освобождения динамически выделенной памяти после того, как
надобность в структуре
hostent
отпадет.
Параметры getipnodebyname
Функция
getipnodebyname(3)
ищет сетевой адрес машины, указанной в параметре
name.
Параметр
af
указывает на одно из следующих значений:
AF_INET
Параметр
name
указывает на адрес IPv4 в точечной нотации или на имя сетевой машины IPv4.
AF_INET6
Параметр
name
указывает на шестнадцатеричный адрес IPv6 или имя сетевой машины IPv6.
Параметр
flags
указывает на дополнительные опции. Возможно указать более одной опции с помощью
логического сложения (OR).
Если опции не требуются,
flags
должен быть равен нулю.
AI_V4MAPPED
Этот флаг используется с
AF_INET6
для запроса адресов IPv4 вместо адресов IPv6;
адрес IPv4 будет отображен в адресе IPv6.
AI_ALL
Это флаг используется с
AI_V4MAPPED
для запроса одновременно адресов IPv4 и IPv6. Любой найденный адрес IPv4 будет
отображен в адресе IPv6.
AI_ADDRCONFIG
Этот флаг используется с
AF_INET6
и указывает, что запрос адресов IPv6 не должен производиться, если система не имеет
хотя бы одного адреса IPv6, присвоенного сетевому интерфейсу, а также, что
запрос адресов IPv4 не должен производиться, если система не имеет хотя бы
одного адреса IPv4, присвоенного сетевому интерфейсу. Флаг может быть
использован сам по себе или вместе с флагом
AI_V4MAPPED.
AI_ALL
Этот флаг равен
(AI_ADDRCONFIG | AI_V4MAPPED).
Параметры getipnodebyaddr
Функция
getipnodebyaddr(3)
ищет имя машины, адрес которой указан в параметре
addr.
Параметр
af
указывает на одно из следующих значений:
AF_INET
Параметр
addr
указывает на структуру
structin_addr,
значение
len
которой должно быть равно
sizeof(structin_addr).
AF_INET6
Параметр
addr
указывает на структуру
structin6_addr,
значение
len
которой должно быть равно
sizeof(structin6_addr).
ВОЗВРАЩАЕМЫЕ ЗНАЧЕНИЯ
В случае ошибки возвращается "пустой" указатель, при этом
error_num
будет содержать один из нижеприведенных кодов ошибок:
HOST_NOT_FOUND
Имя машины или сетевой адрес не найдены.
NO_ADDRESS
Сервер доменных имен распознал сетевой адрес или имя, но не ответил. Это
может произойти, если сетевая машина имеет только адрес IPv4,
а запрашивалась информация об IPv6, или наоборот.
NO_RECOVERY
Сервер доменных имен возвратил сообщение о постоянной ошибке.
TRY_AGAIN
Сервер доменных имен возвратил сообщение о временной ошибке (может быть, в
следующий раз Вам повезет больше).
При удачном запросе возвращается указатель на структуру
hostent,
содержащую следующие поля:
h_name
Официальное имя сетевой машины.
h_aliases
Массив указателей на неофициальные псевдонимы этой же машины.
Массив оканчивается "пустым" указателем.
h_addrtype
Копия параметра
af
вызовов
getipnodebyname(3)
и
getipnodebyaddr(3).
Значение
h_addrtype
всегда будет равным
AF_INET,
если параметр
af
был равен
AF_INET.
h_addrtype
всегда будет равен
AF_INET6,
если параметр
af
был
AF_INET6.
h_length
Это поле будет принимать значение
sizeof(struct in_addr),
если
h_addrtype
был равен AF_INET, и
sizeof(struct in6_addr),
если
h_addrtype
был равен AF_INET6.
h_addr_list
Массив из одного или нескольких указателей на структуры сетевого адреса для
сетевой машины. Массив оканчивается "пустым" указателем.
ЗАМЕЧАНИЯ
Эти функции существовали в glibc 2.1.91-95, но были снова удалены.
Некоторые Unix-подобные системы поддерживают их, но все вызовы их устарели.