27.3.4. Функция gethostbyname()

27.3.4. Функция gethostbyname()

Пользователям обычно удобнее указать символьное имя сервера, чем его IP-адрес. Для разрешения имени служит функция gethostbyname(). Вот ее прототип:

#include <netinet/in.h>

#include <netdb.h>

struct hostent *gethostbyname(char *name);

Данная функция возвращает указатель на структуру типа hostent, содержащую следующие поля:

char *h_name — доменное имя узла;

char **h_aliases — псевдонимы узла, если таковые определены;

char *h_addr — IP-адрес узла;

int h_addrtype — набор используемых протоколов (в нашем случае — AF_INET);

int h_length — длина адреса узла.

Примеры использования функции:

struct hostent *h;

h = gethostbyname(*argv);

if (h==NULL) {

 printf("Невозможно разрешить имя: `%s` ", *argv);

 exit(1);

}

// Выводим IP-адрес. Вывод в виде: имя -> адрес

printf("%s -> %s ", *argv,

inet_ntoa(*((struct in_addr *)h->h_addr_list[0])));

Узнать свой собственный адрес можно с помощью функции getsockname():

extern int getsockname(int __fd, __SOCKADDR_ARG __addr,

 socklen_t *__restrict __len) __THROW;

Ей нужно передать три параметра — дескриптор сокета, адрес структуры, которая будет содержать информацию о нашем узле (его адрес). Третий параметр будет содержать длину адресной структуры.

Данный текст является ознакомительным фрагментом.