Книга: 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-13hints
), вызывает функцию getaddrinfo
и возвращает пустой указатель, если происходит ошибка.
Мы вызываем эту функцию в листинге 16.11, когда нам нужно использовать getaddrinfo
для получения информации об узле и о службе и при этом мы хотим установить соединение самостоятельно.
- 11.1. Введение
- 11.2. Система доменных имен
- 11.3. Функция gethostbyname
- 11.4 Функция gethostbyaddr
- 11.5. Функции getservbyname и getservbyport
- 11.6. Функция getaddrinfo
- 11.7. Функция gai_strerror
- 11.8. Функция freeaddrinfo
- 11.9. Функция getaddrinfo: IPv6
- 11.10. Функция getaddrinfo: примеры
- 11.11. Функция host_serv
- 11.12. Функция tcp_connect
- 11.13. Функция tcp_listen
- 11.14. Функция udp_client
- 11.15. Функция udp_connect
- 11.16. Функция udp_server
- 11.17. Функция getnameinfo
- 11.18. Функции, допускающие повторное вхождение
- 11.19. Функции gethostbyname_r и gethostbyaddr_r
- 11.20. Устаревшие функции поиска адресов IPv6
- 11.21. Другая информация о сетях
- 11.22. Резюме
- Упражнения
- 11.15. Функция udp_connect
- 10.3. Потоковый эхо-клиент SCTP типа «один-ко-многим»: функция main
- 11.7. Функция gai_strerror
- 11.17. Функция getnameinfo
- Тестирование Web-сервиса XML с помощью WebDev.WebServer.exe
- 2.1.3. Функция getopt_long()
- InterBase Super Server для Windows
- Каталог BIN в SuperServer
- Минимальный состав сервера InterBase SuperServer
- InterBase Classic Server под Linux
- Каталог BIN в InterBase Classic Server для Linux
- SuperServer