ВУЗ:
Составители:
47
Эта структура данных используется для представления записи в базе данных
хостов. Структура имеет следующие поля:
h_name “официальное” имя хоста;
h_aliases альтернативные имена хоста, определенные как вектор строк,
заканчивающихся нулем;
h_addrtype тип адреса хоста. Может содержать значения AF_INET и AF_INET6;
h_length длина в байтах каждого адреса;
h_addr_list вектор адресов хоста (хост может быть подключен к нескольким сетям,
для каждой из которых он может иметь уникальный адрес). Вектор
заканчивается нулевым указателем;
h_addr синоним для h_addr_list[0].
Следующие функции предназначены для поиска в базе данных хостов.
Результат поиска возвращается в размещенном статически блоке памяти.
struct hostent * gethostbyname (const char *NAME)
Функция возвращает информацию о хосте NAME. Если такой хост не найден,
возвращается нулевой указатель.
struct hostent * gethostbyname2 (const char *NAME, int AF)
Эта функция идентична gethostbyname кроме того, что позволяет указать тип
возвращаемого адреса.
struct hostent * gethostbyaddr (const char *ADDR, int LENGTH,
int FORMAT)
Возвращает информацию о хосте с интернет-адресом ADDR. В действительно
ADDR может не быть указателем на char, это может быть указатель на адрес как в
стандарте IPv4, так и IPv6. Аргумент LENGTH задает длину адреса, задаваемого в
ADDR. FORMAT указывает формат адреса. Если хост с таким адресом не найден,
функция возвращает нулевой указатель.
Если поиск с использованием функций gethostbyname и gethostbyaddr
завершился с ошибкой, переменная errno может принимать следующие значения:
HOST_NOT_FOUND Хост не найден в базе данных.
TRY_AGAIN Соединение с сервером имен не было установлено. При
повторной попытке поиска функция может выполниться
успешно.
NO_RECOVERY Произошла фатальная ошибка.
NO_ADDRESS База данных содержит запись для задаваемого имени хоста, но
отсутствует соответствующий адрес.
Рассмотренные выше функции не являются повторно входимыми и,
соответственно, не могут использоваться в многопотоковых приложениях. В этом
контексте могут использоваться следующие функции, определенные в Linux.
int gethostbyname_r (const char *restrict NAME,
struct hostent *restrict RESULT_BUF,
char *restrict BUF,
size_t BUFLEN,
struct hostent **restrict RESULT,
int *restrict H_ERRNOP)
Функция возвращает информацию о хосте NAME. При вызове функции
необходимо передать указатель на буфер результата в параметре RESULT_BUF.
Функция также может понадобиться дополнительное пространство памяти, указатель на
которое и длина буфера передаются в параметрах BUF и BUFLEN.
Указатель на буфер, в котором хранится результат, помещается в RESULT.
Если произошла ошибка или запись не была найдена, RESULT возвращает нулевой
указатель. Функция выполнилась успешно, если ее возвращаемое значение равно 0, в
противном случае возвращаемое значение равно коду ошибки. В дополнение к кодам,
Эта структура данных используется для представления записи в базе данных хостов. Структура имеет следующие поля: h_name “официальное” имя хоста; h_aliases альтернативные имена хоста, определенные как вектор строк, заканчивающихся нулем; h_addrtype тип адреса хоста. Может содержать значения AF_INET и AF_INET6; h_length длина в байтах каждого адреса; h_addr_list вектор адресов хоста (хост может быть подключен к нескольким сетям, для каждой из которых он может иметь уникальный адрес). Вектор заканчивается нулевым указателем; h_addr синоним для h_addr_list[0]. Следующие функции предназначены для поиска в базе данных хостов. Результат поиска возвращается в размещенном статически блоке памяти. struct hostent * gethostbyname (const char *NAME) Функция возвращает информацию о хосте NAME. Если такой хост не найден, возвращается нулевой указатель. struct hostent * gethostbyname2 (const char *NAME, int AF) Эта функция идентична gethostbyname кроме того, что позволяет указать тип возвращаемого адреса. struct hostent * gethostbyaddr (const char *ADDR, int LENGTH, int FORMAT) Возвращает информацию о хосте с интернет-адресом ADDR. В действительно ADDR может не быть указателем на char, это может быть указатель на адрес как в стандарте IPv4, так и IPv6. Аргумент LENGTH задает длину адреса, задаваемого в ADDR. FORMAT указывает формат адреса. Если хост с таким адресом не найден, функция возвращает нулевой указатель. Если поиск с использованием функций gethostbyname и gethostbyaddr завершился с ошибкой, переменная errno может принимать следующие значения: HOST_NOT_FOUND Хост не найден в базе данных. TRY_AGAIN Соединение с сервером имен не было установлено. При повторной попытке поиска функция может выполниться успешно. NO_RECOVERY Произошла фатальная ошибка. NO_ADDRESS База данных содержит запись для задаваемого имени хоста, но отсутствует соответствующий адрес. Рассмотренные выше функции не являются повторно входимыми и, соответственно, не могут использоваться в многопотоковых приложениях. В этом контексте могут использоваться следующие функции, определенные в Linux. int gethostbyname_r (const char *restrict NAME, struct hostent *restrict RESULT_BUF, char *restrict BUF, size_t BUFLEN, struct hostent **restrict RESULT, int *restrict H_ERRNOP) Функция возвращает информацию о хосте NAME. При вызове функции необходимо передать указатель на буфер результата в параметре RESULT_BUF. Функция также может понадобиться дополнительное пространство памяти, указатель на которое и длина буфера передаются в параметрах BUF и BUFLEN. Указатель на буфер, в котором хранится результат, помещается в RESULT. Если произошла ошибка или запись не была найдена, RESULT возвращает нулевой указатель. Функция выполнилась успешно, если ее возвращаемое значение равно 0, в противном случае возвращаемое значение равно коду ошибки. В дополнение к кодам, 47
Страницы
- « первая
- ‹ предыдущая
- …
- 45
- 46
- 47
- 48
- 49
- …
- следующая ›
- последняя »