Параметр сокета 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;
■ spinfo_address
позволяет приложению указать конкретный адрес собеседника, для которого оно хочет получить сведения. По возвращении из getsockopt
или sctp_opt_info
значение структуры должно оставаться неизменным;
■ spinfo_state
может содержать одно или несколько значений (табл. 7.7).
Таблица 7.7. Состояния адреса собеседника SCTP
Константа |
Описание |
SCTP_ACTIVE |
Адрес активен и доступен |
SCTP_INACTIVE |
В настоящий момент адрес недоступен |
SCTP_ADDR_UNCONFIRMED |
Доставка данных или проверочных сообщений на данный адрес не была подтверждена |
Неподтвержденным считается адрес, перечисленный собеседником в списке действующих, но не проверенный локальным SCTP. Для проверки адреса требуется, чтобы отправленные на него данные или проверочные сообщения были подтверждены. Для непроверенного адреса не может быть указано корректное значение тайм-аута повторной передачи (RTO). Активными считаются адреса, доступные для передачи данных.
Читать дальше
Конец ознакомительного отрывка
Купить книгу