getipnodebyname - возвращают сетевые имена и
getipnodebyname(3)
возвращают сетевые имена и
Other Alias
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);
ОПИСАНИЕ
Эти функции устарели (и недоступны в glibc). Используйте вместо них функции
getaddrinfo(3) и
getnameinfo(3).
Функции getipnodebyname() и getipnodebyaddr() возвращают имена и
адреса машины в сети. Эти функции возвращают указатель на следующую
структуру:
struct hostent {
char *h_name;
char **h_aliases;
int h_addrtype;
int h_length;
char **h_addr_list;
};
Эти функции заменяют функции gethostbyname(3) и gethostbyaddr(3),
которые могут возвращать только сетевые адреса семейства IPv4. Функции
getipnodebyname() и getipnodebyaddr() могут осуществлять доступ к
нескольким семействам сетевых адресов.
В отличие от функций gethostby эти функции возвращают указатели на
динамически выделяемую память. Функция freehostent() используется для
освобождения динамически выделенной памяти после того, как надобность в
структуре hostent отпадёт.
Параметры getipnodebyname()
Функция
getipnodebyname() ищет сетевой адрес узла, указанного в параметре
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_DEFAULT
Этот флаг эквивалентен (AI_ADDRCONFIG | AI_V4MAPPED).
Параметры getipnodebyaddr()
Функция
getipnodebyaddr() ищет имя узла, чей сетевой адрес указан в
параметре
addr. В параметре
af указывается одно из следующих значений:
AF_INET
Параметр addr указывает на структуру struct in_addr и значение len
должно быть равно sizeof(struct in_addr).
AF_INET6
Параметр addr указывает на структуру struct in6_addr и значение len
должно быть равно sizeof(struct in6_addr).
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
При ошибке возвращается NULL, а в
error_num будет содержаться код ошибки
из следующего списка:
HOST_NOT_FOUND
Имя узла или сетевой адрес не найдены.
NO_ADDRESS
Сервер доменных имён распознал сетевой адрес или имя, но не ответил. Это
может произойти, если сетевой узел имеет только адреса IPv4, а запрашивалась
информация об IPv6, или наоборот.
NO_RECOVERY
Сервер доменных имён возвратил сообщение о постоянной ошибке.
TRY_AGAIN
Сервер доменных имён возвратил сообщение о временной ошибке. Возможно, ответ
может быть получен при повторной попытке.
При выполненном запросе возвращается указатель на структуру hostent,
содержащую следующие поля:
h_name
Официальное имя данного сетевого узла.
h_aliases
Массив указателей на неофициальные псевдонимы этого же узла. Массив
оканчивается указателем null.
h_addrtype
Копия параметра
af вызова
getipnodebyname() или
getipnodebyaddr(). Значение
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
Массив из одного или нескольких указателей на структуры сетевого адреса для
сетевого узла. Массив оканчивается указателем null.
СООТВЕТСТВИЕ СТАНДАРТАМ
RFC 2553.
ЗАМЕЧАНИЯ
Эти функции существовали в glibc 2.1.91-95, но были удалены. Некоторые
UNIX-подобные системы поддерживают их, но все эти вызовы устарели.