getipnodebyname, getipnodebyaddr, freehostent - получают сетевые имена и адреса машины
НАЗВАНИЕgetipnodebyname, getipnodebyaddr, freehostent - получают
сетевые имена и адреса машины
СИНТАКСИС
#include
#include
#include
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;
};
Эти функции заменяют друг на друга функции gethostby-
name(3) и gethostbyaddr(3), которые могут осуществлять
доступ только к семейству адресов IPv4. Функции getipn-
odebyname(3) и getipnodebyaddr(3) могут осуществлять
доступ к нескольким семействам сетевых адресов.
В отличие от функций gethostby эти функции возвращают
указатели на динамически выделяемую память. Функция free-
hostent(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 вызовов getipnodeby-
name(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
Массив из одного или нескольких указателей на
структуры сетевого адреса для сетевой машины.
Массив оканчивается "пустым" указателем.