UNIX: разработка сетевых приложений
■
игнорируется при установке параметров по умолчанию. При получении сообщений функциейsinfo_cumtsnилиrecvmsgэто поле содержит значение кумулятивного транспортного последовательного номера, вычисленного локальным стеком SCTP для удаленного собеседника;sctp_recvmsg■
_assoc_id содержит идентификатор ассоциации, для которой требуется установка параметров по умолчанию. Для сокетов типа «один-к-одному» это поле игнорируется.sinfoТаблица 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 возвращает ошибкуSCTP_DISABLE_FRAGMENTSи не отсылает сообщение.EMSGSIZEПараметр может использоваться приложениями, которые хотят самостоятельно управлять размерами сообщений, при условии, что любое из этих сообщений может поместиться в IP-пакет. Приложение должно быть готово обработать ошибку, обеспечив фрагментацию на уровне приложения или изменение размера сообщений.
Параметр сокета SCTP_EVENTS
Этот параметр сокета позволяет включать, выключать и определять состояние подписки на различные уведомления SCTP. Уведомление SCTP представляет собой сообщение, отправляемое стеком SCTP приложению. Сообщение считывается как и обычные данные, однако в поле
при вызове функцииmsg_flagsдолжно находиться значениеrecvmsg. Приложение, не готовое к использованиюMSG_NOTIFICATIONилиrecvmsg, не должно включать подписку на события. Параметр позволяет управлять событиями восьми различных типов и передавать структуруsctp_recvmsg. Нулевое значение соответствует отключению подписки, а единица — включению.sctp_event_subscribeСтруктура
определяется следующим образом:sctp_event_subscribestruct 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_paddrinfostruct 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;