Уильям Стивенс - UNIX: разработка сетевых приложений

Тут можно читать онлайн Уильям Стивенс - UNIX: разработка сетевых приложений - бесплатно ознакомительный отрывок. Жанр: comp-osnet, издательство Питер, год 2007. Здесь Вы можете читать ознакомительный отрывок из книги онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.
  • Название:
    UNIX: разработка сетевых приложений
  • Автор:
  • Жанр:
  • Издательство:
    Питер
  • Год:
    2007
  • Город:
    Санкт-Петербург
  • ISBN:
    5-94723-991-4
  • Рейтинг:
    4.33/5. Голосов: 91
  • Избранное:
    Добавить в избранное
  • Отзывы:
  • Ваша оценка:
    • 80
    • 1
    • 2
    • 3
    • 4
    • 5

Уильям Стивенс - UNIX: разработка сетевых приложений краткое содержание

UNIX: разработка сетевых приложений - описание и краткое содержание, автор Уильям Стивенс, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru

Новое издание книги, посвященной созданию веб-серверов, клиент-серверных приложений или любого другого сетевого программного обеспечения в операционной системе UNIX, — классическое руководство по сетевым программным интерфейсам, в частности сокетам. Оно основано на трудах Уильяма Стивенса и полностью переработано и обновлено двумя ведущими экспертами по сетевому программированию. В книгу включено описание ключевых современных стандартов, реализаций и методов, она содержит большое количество иллюстрирующих примеров и может использоваться как учебник по программированию в сетях, так и в качестве справочника для опытных программистов.

UNIX: разработка сетевых приложений - читать онлайн бесплатно ознакомительный отрывок

UNIX: разработка сетевых приложений - читать книгу онлайн бесплатно (ознакомительный отрывок), автор Уильям Стивенс
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

■ Обновляется элемент msg_controllen— его новым значением становится фактический размер записанных вспомогательных данных. Этот аргумент также является аргументом типа «значение-результат», и его результат по завершении функции равен 16.

■ Элемент msg_flagsизменяется функцией recvmsg, но процессу никакие флаги не возвращаются.

В табл. 14.3 показаны различия между рассмотренными пятью группами функций ввода-вывода.

Таблица 14.3. Сравнение пяти групп функций ввода-вывода

Функция Произвольный дескриптор Только дескриптор сокета Один буфер для чтения и записи Распределяющее чтение, объединяющая запись Наличие флагов Указание адреса собеседника Управляющая информация
read, write
readv, writev
recv, send
recvfrom, sendto
recvmsg, sendsg

14.6. Вспомогательные данные

Вспомогательные данные (ancillary data) можно отправлять и получать, используя элементы msg_controlи msg_controllenструктуры msghdrс функциями sendmsgи recvmsg. Другой термин, используемый для обозначения вспомогательных данных, — управляющая информация ( control information ). В этом разделе мы рассматриваем данное понятие и показываем структуру и макросы, используемые для создания и обработки вспомогательных данных. Примеры программ мы откладываем до следующих глав, в которых рассказывается о применении вспомогательных данных.

В табл. 14.4 приводится обобщение различных вариантов применения вспомогательных данных, рассматриваемых в этой книге.

Таблица 14.4. Использование вспомогательных данных

Протокол cmsg_level cmsg_type Описание
IPv4 IPPROTO_IP IP_RECVDSTADDR Получает адрес получателя с дейтаграммой UDP
IP_RECVIF Получает индекс интерфейса с дейтаграммой UDP
IPv6 IPPROTO_IPV6 IPV6_DSTOPTS Задает/получает параметры получателя
IPV6_HOPLIMIT Задает/получает предел количества транзитных узлов
IPV6_HOPOPTS Задает/получает параметры для транзитных узлов
IPV6_NEXTHOP Задает следующий транзитный адрес
IPV6_PKTINFO Задает/получает информацию о пакете
IPV6_RTHDR Задает/получает информацию о пакете
Домен Unix SOL_SOCKET SCM_RIGHTS Посылает/получает дескрипторы
SCM_CREDS Посылает/получает данные, идентифицирующие пользователя

Набор протоколов OSI также использует вспомогательные данные для различных целей, которые мы не рассматриваем в этой книге.

Вспомогательные данные состоят из одного или более объектов вспомогательных данных ( ancillary data objects ), каждый из которых начинается со структуры cmsghdr, определяемой подключением заголовочного файла :

struct cmsghdr {

socklen_t cmsg_len; /* длина структуры в байтах */

int cmsg_level; /* исходящий протокол */

int cmsg_type; /* тип данных, специфичный для протокола */

/* далее следует массив символов без знака cmsg_data[] */

};

Мы уже видели эту структуру на рис. 14.2, когда она использовалась с параметром сокета IP_RECVDSTADDRдля возвращения IP-адреса получателя полученной дейтаграммы UDP. Вспомогательные данные, на которые указывает элемент msg_control, должны быть соответствующим образом выровнены для структуры cmsghdr. Один из способов выравнивания мы показываем в листинге 15.7.

На рис. 14.3 приводится пример двух объектов вспомогательных данных, содержащихся в буфере управляющей информации.

Рис 143 Два объекта вспомогательных данных Элемент msgcontrolуказывает на - фото 98

Рис. 14.3. Два объекта вспомогательных данных

Элемент msg_controlуказывает на первый объект вспомогательных данных, а общая длина вспомогательных данных задается элементом msg_controllen. Каждому объекту предшествует структура cmsghdr, которая описывает объект. Между элементом cmsg_typeи фактическими данными может существовать заполнение, а также заполнение может быть в конце данных, перед следующим объектом вспомогательных данных. Пять макросов CMSG_xxx, которые мы описываем далее, учитывают это возможное заполнение.

ПРИМЕЧАНИЕ

Не все реализации поддерживают наличие нескольких объектов вспомогательных данных в буфере управляющей информации.

На рис. 14.4 приводится формат структуры cmsghdrпри ее использовании с доменным сокетом Unix для передачи дескрипторов (см. раздел 15.7) или передачи данных, идентифицирующих пользователя (см. раздел 15.8).

Рис 144 Структура cmsghdr при использовании с доменными сокетами Unix - фото 99

Рис. 14.4. Структура cmsghdr при использовании с доменными сокетами Unix

Предполагается, что каждый из трех элементов структуры cmsghdrзанимает 4 байта и между структурой cmsghdrи данными нет заполнения. При передаче дескрипторов содержимое массива cmsg_data— это фактические значения дескрипторов. На этом рисунке мы показываем только один передаваемый дескриптор, но в общем может передаваться и более одного дескриптора (тогда значение элемента cmsg_lenбудет равно 12 плюс число дескрипторов, умноженное на 4, если считать, что каждый дескриптор занимает 4 байта).

Вспомогательные данные, возвращаемые функцией recvmsg, могут содержать любое число объектов вспомогательных данных. Чтобы скрыть возможное заполнение от приложения, для упрощения обработки вспомогательных данных определены следующие пять макросов (что требует включения заголовочного файла ).

#include

#include /* для макроса ALIGN во многих реализациях */

struct cmsghdr *CMSG_FIRSTHDR(struct msghdr * mhdrptr );

Возвращает: указатель на первую структуру cmsghdr или NULL, если нет вспомогательных данных

struct cmsghdr *CMSG_NXTHDR(struct msghdr * mhdrptr , struct cmsghdr * cmsgptr );

Возвращает: указатель на структуру cmsghdr или NULL, если нет больше объектов вспомогательных данных

unsigned char *CMSG_DATA(struct cmsghdr * cmsgptr );

Возвращает: указатель на первый байт данных, связанных со структурой cmsghdr

unsigned int CMSG_LEN(unsigned int length );

Возвращает: значение, которое записывается в cmsg_len

unsigned int CMSG_SPACE(unsigned int length );

Возвращает: общий размер объекта вспомогательных данных

ПРИМЕЧАНИЕ

В POSIX определены первые пять макросов, а в [113] определены последние два.

Эти макросы могли бы быть использованы в следующем псевдокоде:

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать


Уильям Стивенс читать все книги автора по порядку

Уильям Стивенс - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




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


Отзывы читателей о книге UNIX: разработка сетевых приложений, автор: Уильям Стивенс. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x