Получить запись о сетевом хосте по заданному интернет-адресу
#include <netdb.h>struct hostent * gethostbyaddr( const void *addr,socklen_t len,int type );
NULL
) в сетевом порядке байт.AF_INET
.libsocket
Функция gethostbyaddr() ищет информацию, связанную с хостом, адрес которого указан в addr, в семействе адресов, заданном в type, при необходимости устанавливая соединение с базой данных.
И gethostbyaddr() и gethostbyname() помечены как устаревшие в POSIX 1003.1. Рекомендуется использовать getaddrinfo() или getnameinfo(). |
Данная функция возвращает указатель на структуру struct hostent, описывающую Интернет-хост. Эта структура содержит либо информацию, полученную от сервера имен, либо отдельные поля из строки в /etc/hosts.
Можно использовать sethostent(), чтобы потребовать использование подключенного TCP-сокета для запросов. Если флаг stayopen не равен нулю, все запросы к серверу имен будут использовать TCP, и соединение будет сохраняться после каждого вызова gethostbyaddr() или gethostbyname(). Если флаг stayopen равен нулю, запросы будут использовать UDP датаграммы.
Указатель на корректную структуру struct hostent. Если возникла ошибка функция возвращает NULL
, код ошибки записывается в errno.
См. herror().
Использование функции gethostbyaddr() для нахождения хоста:
struct sockaddr_in client;struct hostent *host;int sock, fd, len;...len = sizeof( client );fd = accept( sock, (struct sockaddr *)&client, &len );if ( fd == -1 ){perror( "accept" );exit( 1 );}host = gethostbyaddr( (const void *)&client.sin_addr,sizeof( struct in_addr ),AF_INET );printf( "Connection from %s: (%s)\n",host ? host->h_name : "<unknown>",inet_ntoa( client.sin_addr ) );...
POSIX 1003.1 Obsolescent
Данная функция использует статическое хранилище данных; если эти данные необходимы для использования в будущем, необходимо скопировать их, прежде чем любые последующие вызовы перезапишут их.
В настоящее время поддерживается только формат Интернет-адреса.
endhostent(), gethostbyname(), gethostbyaddr_r(), gethostent(), herror(), struct hostent, sethostent()
/etc/hosts, /etc/nsswitch.conf в Справочнике по Утилитам
Предыдущий раздел: Описание API сетевой библиотеки