Книга: UNIX: разработка сетевых приложений

11.11. Функция host_serv

11.11. Функция host_serv

Наш первый интерфейс функции getaddrinfo не требует от вызывающего процесса размещать в памяти структуру рекомендаций и заполнять ее. Вместо этого аргументами нашей функции host_serv будут интересующие нас поля — семейство адресов и тип сокета.

#include "unp.h"
struct addrinfo *host_serv(const char *hostname, const char *service, int family, int socktype);
Возвращает: в случае успешного выполнения указатель на структуру addrinfo. NULL в случае ошибки

В листинге 11.3 показан исходный код этой функции.

Листинг 11.3. Функция host_serv

//lib/host_serv.c
 1 #include "unp.h"
 2 struct addrinfo*
 3 host_serv(const char *host, const char *serv, int family, int socktype)
 4 {
 5  int n;
 6  struct addrinfo hints, *res;
 7  bzero(&hints, sizeof(struct addrinfo));
 8  hints.ai_flags = AI_CANONNAME; /* всегда возвращает каноническое имя */
 9  hints.ai_family = family; /* AF_UNSPEC, AF_INET, AF_INET6, ... */
10  hints.ai_socktype = socktype; /* 0, SOCK_STREAM, SOCK_DGRAM, ... */
11  if ((n = getaddrinfo(host, serv, &hints, &res)) != 0)
12   return (NULL);
13  return (res); /* возвращает указатель на первый элемент в связном
                     списке */
14 }
7-13
 Функция инициализирует структуру рекомендаций (hints), вызывает функцию getaddrinfo и возвращает пустой указатель, если происходит ошибка.

Мы вызываем эту функцию в листинге 16.11, когда нам нужно использовать getaddrinfo для получения информации об узле и о службе и при этом мы хотим установить соединение самостоятельно.

Оглавление книги


Генерация: 1.198. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз