UNIX: разработка сетевых приложений
UNIX: разработка сетевых приложений читать книгу онлайн
Новое издание книги, посвященной созданию веб-серверов, клиент-серверных приложений или любого другого сетевого программного обеспечения в операционной системе UNIX, — классическое руководство по сетевым программным интерфейсам, в частности сокетам. Оно основано на трудах Уильяма Стивенса и полностью переработано и обновлено двумя ведущими экспертами по сетевому программированию. В книгу включено описание ключевых современных стандартов, реализаций и методов, она содержит большое количество иллюстрирующих примеров и может использоваться как учебник по программированию в сетях, так и в качестве справочника для опытных программистов.
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
2. Если служба предоставляется для множества типов сокетов, то одна структура может быть возвращена для каждого типа сокета в зависимости от
ai_socktypegetaddrinfoai_socktypeai_socktypeНапример, если структура
hintsdomainaddrinfo■ одна для первого IP-адреса и типа сокета SOCK_STREAM;
■ одна для первого IP-адреса и типа сокета SOCK_DGRAM;
■ одна для второго IP-адреса и типа сокета SOCK_STREAM;
■ одна для второго IP-адреса и типа сокета SOCK_DGRAM.
Мы показываем схематическое изображение этого примера на рис. 11.3. Не существует никакого гарантированного порядка структур при возвращении множества элементов. Например, мы не можем считать, что службы TCP возвращаются перед службами UDP.

Рис. 11.3. Пример информации, возвращаемой функцией getaddrinfo
Хотя это и не гарантируется, реализация должна возвращать IP-адреса в том же порядке, в котором они возвращаются DNS. Некоторые распознаватели позволяют администратору указывать порядок сортировки адресов в файле /etc/resolv.conf. Протокол IPv6 определяет правила выбора адресов (RFC 3484 [28]), которые могут влиять на порядок адресов, возвращаемых getaddrinfo.
Информация, возвращаемая в структурах
addrinfosocketconnectsendtobindsocketai_familyai_socktypeai_protocolconnectbindai_addrgetaddrinfoai_addrlenЕсли в структуре
hintsAI_CANONNAMEai_canonnametelnetНа рис. 11.3 представлена возвращаемая информация для следующего вызова:
struct addrinfo hints, *res;bzero(&hints, sizeof(hints));hints.ai_flags = AI_CANONNAME;hints.ai_family = AF_INET;getaddrinfo("bsdi", "domain", &hints, &res);На этом рисунке все, кроме переменной
resmallocfreebsd4freebsd4.unpbook.comПорт 53 предназначен для службы
domainai_protocolgetaddrinfoai_protocolgetaddrinfoВ табл. 11.1 показано число структур
addrinfoai_socktypeТаблица 11.1. Число структур addrinfo, возвращаемых для каждого IP-адреса
| Элемент ai_socktype | Служба обозначена именем и предоставляется: | Служба обозначена именем порта | |||||
|---|---|---|---|---|---|---|---|
| Только TCP | Только UDP | Только SCTP | TCP и UDP | TCP и SCTP | TCP, UDP и SCTP | ||
| 0 | 1 | 1 | 1 | 2 | 2 | 3 | Ошибка |
| SOCK_STREAM | 1 | Ошибка | 1 | 1 | 2 | 2 | 2 |
| SOCK_DGRAM | Ошибка | 1 | 1 | Ошибка | 1 | 1 | |
| SOCK_SEQPACKET | Ошибка | Ошибка | 1 | Ошибка | 1 | 1 | 1 |
Более одной структуры
addrinfoai_socktypehints/etc/services
