gethostbyaddr()

Получить запись о сетевом хосте по заданному интернет-адресу

Прототип:

#include <netdb.h>
struct hostent * gethostbyaddr( const void *addr,
socklen_t len,
int type );

Аргументы:

addr
Указатель на адрес в двоичном формате (т.е. не оканчивающийся NULL) в сетевом порядке байт.
length
Длина addr в байтах.
type
Тип адреса. В настоящее время должен быть AF_INET.

Библиотека:

libsocket

Описание:

Функция gethostbyaddr() ищет информацию, связанную с хостом, адрес которого указан в addr, в семействе адресов, заданном в type, при необходимости устанавливая соединение с базой данных.


Note: И 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 ) );
...

Файлы:

/etc/hosts
Файл, содержащий базу данных доменных имен.
/etc/nsswitch.conf
Конфигурационный файл для выбора соответствующей службы имен.

Классификация:

POSIX 1003.1 Obsolescent

Безопасность использования
Точка остановки потока
Да
Обработчик прерываний
Нет
Обработчик сигналов
Нет
В потоке
Нет

Предостережения:

Данная функция использует статическое хранилище данных; если эти данные необходимы для использования в будущем, необходимо скопировать их, прежде чем любые последующие вызовы перезапишут их.

В настоящее время поддерживается только формат Интернет-адреса.

Тематические ссылки:

endhostent(), gethostbyname(), gethostbyaddr_r(), gethostent(), herror(), struct hostent, sethostent()

/etc/hosts, /etc/nsswitch.conf в Справочнике по Утилитам




Предыдущий раздел: Описание API сетевой библиотеки