Linux Man на русском

  User    Syst    Libr    Device    Files    Other    Admin  



   getipnodebyaddr - возвращают сетевые имена и

getipnodebyaddr(3) возвращают сетевые имена и

Other Alias

getipnodebyname, 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-подобные системы поддерживают их, но все эти вызовы устарели.