Уильям Стивенс - UNIX: разработка сетевых приложений
- Название:UNIX: разработка сетевых приложений
- Автор:
- Жанр:
- Издательство:Питер
- Год:2007
- Город:Санкт-Петербург
- ISBN:5-94723-991-4
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Уильям Стивенс - UNIX: разработка сетевых приложений краткое содержание
Новое издание книги, посвященной созданию веб-серверов, клиент-серверных приложений или любого другого сетевого программного обеспечения в операционной системе UNIX, — классическое руководство по сетевым программным интерфейсам, в частности сокетам. Оно основано на трудах Уильяма Стивенса и полностью переработано и обновлено двумя ведущими экспертами по сетевому программированию. В книгу включено описание ключевых современных стандартов, реализаций и методов, она содержит большое количество иллюстрирующих примеров и может использоваться как учебник по программированию в сетях, так и в качестве справочника для опытных программистов.
UNIX: разработка сетевых приложений - читать онлайн бесплатно ознакомительный отрывок
Интервал:
Закладка:
u_int32_t sinfo_timetolive;
u_int32_t sinfo_tsn;
u_int32_t sinfo_cumtsn;
sctp_assoc_t sinfo_assoc_id;
};
Поля структуры определяются следующим образом:
■ sinfo_streamзадает поток, в который по умолчанию направляются все сообщения;
■ sinfo_ssnигнорируется при установке значений параметров по умолчанию. При получении сообщений функцией recvmsgили sctp_recvmsgэто поле содержит значение потокового последовательного номера (stream sequence number, SSN), помещенное собеседником в порцию данных;
■ sinfo_flagsустанавливает значения всех флагов для будущих сообщений. Допустимые значения флагов приводятся в табл. 7.5;
■ sinfo_ppidзадает значение идентификатора протокола SCTP для всех будущих передач данных;
■ sinfo_contextзадает значение по умолчанию для поля sinfo_context, которое является локальной меткой для сообщений, которые не могли быть доставлены собеседнику;
■ sinfo_timetoliveопределяет время жизни отправляемых сообщений. Поле времени жизни используется стеком SCTP для того, чтобы сбрасывать сообщения, задержавшиеся в буфере отправки на слишком большой срок и не переданные ни разу. Если обе конечные точки поддерживают режим частичной надежности, параметр времени жизни влияет и на количество попыток повторной передачи, ограничивая их срок;
■ sinfo_tsnигнорируется при установке параметров по умолчанию. При получении сообщений функцией recvmsgили sctp_recvmsgэто поле содержит значение транспортного последовательного номера (transport sequence number, TSN), помещенное собеседником в порцию данных SCTP;
■ sinfo_cumtsnигнорируется при установке параметров по умолчанию. При получении сообщений функцией recvmsgили sctp_recvmsgэто поле содержит значение кумулятивного транспортного последовательного номера, вычисленного локальным стеком SCTP для удаленного собеседника;
■ sinfo_assoc_id содержит идентификатор ассоциации, для которой требуется установка параметров по умолчанию. Для сокетов типа «один-к-одному» это поле игнорируется.
Таблица 7.5. Допустимые значения флагов SCTP (поле sinfo_flags)
| Константа | Описание |
|---|---|
| MSG_ABORT | Вызывает аварийное завершение ассоциации |
| MSG_ADDR_OVER | Заставляет SCTP использовать указанный адрес вместо адреса по умолчанию |
| MSG_EOF | Корректное завершение ассоциации после отправки сообщения |
| MSG_PR_BUFFER | Включение частичной надежности в зависимости от буфера (если она вообще поддерживается) |
| MSG_PR_SCTP | Включение частичной надежности доставки для данного сообщения (если поддерживается) |
| MSG_UNORDERED | Указывает, что данное сообщение использует сервис неупорядоченной доставки |
Обратите внимание, что значения параметров по умолчанию используются только тогда, когда сообщение отправляется без собственной структуры sctp_sndrcvinfo. Если же эта структура добавляется во вспомогательные данные при отправке сообщений, заданные в ней значения имеют приоритет перед значениями по умолчанию. Параметр SCTP_DEFAULT_SEND_PARAMможет использоваться для получения текущих значений по умолчанию при помощи функции sctp_opt_info.
Параметр сокета SCTP_DISАВLE_FRAGМENTS
В обычном режиме работы SCTP фрагментирует все сообщения, не помещающиеся в один пакет SCTP, разбивая их на несколько порций типа DATA. Установка параметра SCTP_DISABLE_FRAGMENTSотключает фрагментацию для данного отправителя. Если сообщение требует фрагментации, а фрагментация отключена, SCTP возвращает ошибку EMSGSIZEи не отсылает сообщение.
Параметр может использоваться приложениями, которые хотят самостоятельно управлять размерами сообщений, при условии, что любое из этих сообщений может поместиться в IP-пакет. Приложение должно быть готово обработать ошибку, обеспечив фрагментацию на уровне приложения или изменение размера сообщений.
Параметр сокета SCTP_EVENTS
Этот параметр сокета позволяет включать, выключать и определять состояние подписки на различные уведомления SCTP. Уведомление SCTP представляет собой сообщение, отправляемое стеком SCTP приложению. Сообщение считывается как и обычные данные, однако в поле msg_flagsпри вызове функции recvmsgдолжно находиться значение MSG_NOTIFICATION. Приложение, не готовое к использованию recvmsgили sctp_recvmsg, не должно включать подписку на события. Параметр позволяет управлять событиями восьми различных типов и передавать структуру sctp_event_subscribe. Нулевое значение соответствует отключению подписки, а единица — включению.
Структура sctp_event_subscribeопределяется следующим образом:
struct sctp_event_subscribe {
u_int8_t sctp_data_io_event;
u_int8_t sctp_association_event;
u_int8_t sctp_address_event;
u_int8_t sctp_send_failure_event;
u_int8_t sctp_peer_error_event;
u_int8_t sctp_shutdown_event;
u_int8_t sctp_partial_delivery_event;
u_int8_t sctp_adaption_layer_event;
};
В табл. 7.6 описано назначение различных событий. Подробнее об уведомлениях вы узнаете в разделе 9.14.
Таблица 7.6. События SCTP
| Константа | Описание |
|---|---|
| sctp_data_io_event | Включение и отключение доставки sctp_sndrcvinfo с каждым вызовом recvmsg |
| sctp_association_event | Включение и отключение уведомлений о состоянии ассоциации |
| sctp_address_event | Включение и отключение уведомлений об адресах |
| sctp_send_failure_event | Включение и отключение уведомлений об ошибках доставки сообщений |
| sctp_peer_error_event | Включение и отключение уведомлений об ошибках протокола собеседника |
| sctp_shutdown_event | Включение и отключение уведомлений о завершении ассоциации |
| sctp_partial_delivery_event | Включение и отключение уведомлений о частичной доставке |
| sctp_adaption_layer_event | Включение и отключение уведомлений уровня-адаптера |
Параметр сокета SCTP_GET_PEER_ADDR_INFO
Этот параметр позволяет получить информацию о собеседнике, которая включает окно приема, сглаженные значения RTT и MTU. Параметр может быть применен только к конкретному адресу собеседника. Вызывающее приложение заполняет поле spinfo_addressструктуры sctp_paddrinfoинтересующим его адресом собеседника. Для максимальной переносимости рекомендуется работать с функцией sctp_opt_info, а не getsockopt. Формат структуры sctp_paddrinfoописан ниже:
struct sctp_paddrinfo {
sctp_assoc_t spinfo_assoc_id;
struct sockaddr_storage spinfo_address;
int32_t spinfo_state;
uint32_t spinfo_cwnd;
u_int32_t spinfo_srtt;
u_int32_t spinfo_rto;
u_int32_t spinfo_mtu;
};
Приложению возвращаются следующие сведения:
■ spinfo_assoc_idсодержит информацию об идентификаторе ассоциации, которая доставляется также в уведомлении об установке ассоциации ( SCTP_COMM_UP). Уникальный идентификатор ассоциации может использоваться для обращения к ней в большинстве функций SCTP;
Интервал:
Закладка: