Вход/Регистрация
UNIX: разработка сетевых приложений
вернуться

Стивенс Уильям Ричард

Шрифт:

Уведомление любого типа имеет следующий формат. Первые восемь байтов идентифицируют тип уведомления и его полную длину. Включение подписки на событие

sctp_data_io_event
приводит к тому, что с каждой операцией чтения пользовательских данных процесс принимает структуру
sctp_sndrcvinfo
. Вызовом
recvmsg
эта структура помещается во вспомогательные данные. Приложение может также вызвать
sctp_recvmsg
, которая использует указатель на структуру
sctp_sndrcvinfo
.

Два уведомления содержат поле кода причины ошибки SCTP (SCTP error cause field). Значения этого поля перечислены в разделе 3.3.10 RFC 2960 [118] и в разделе «CAUSE CODES» (коды причин) документа

http://www.iana.org/assignments/sctp-parameters
.

Уведомления определяются следующим образом.

struct sctp_tlv {

u_int16_t sn_type;

u_int16_t sn_flags;

u_int32_t sn_length;

};

/* уведомление о событии */

union sctp_notification {

struct sctp_tlv sn_header;

struct sctp_assoc_change sn_assoc_change;

struct sctp_paddr_change sn_paddr_change;

struct sctp_remote_error sn_remote_error;

struct sctp_send_failed sn_send_failed;

struct sctp_shutdown_event sn_shutdown_event;

struct sctp_adaption_event sn_adaption_event;

struct sctp_pdapi_event sn_pdapi_event;

};

Обратите внимание, что для интерпретации значения типа используется поле

sn_header
. Таблица 9.2 содержит значения, которые могут помещаться в поля
sn_header
,
sn_type
, а также соответствующие значения поля подписки, которые используются с параметром сокета
SCTP_EVENTS
.

Таблица 9.2. Тип и поле подписки

sn_type Поле подписки
SCTP_ASSOC_CHANGE sctp_association_event
SCTP_PEER_ADDR_CHANGE sctp_address_event
SCTP_REMOTE_ERROR sctp_peer_error_event
SCTP_SEND_FAILED sctp_send_failure_event
SCTP_SHUTDOWN_EVENT sctp_shutdown_event
SCTP_ADAPTION_INDICATON sctp_adaption_layer_event
SCTP_PARTIAL_DELIVERY_EVENT sctp_partial_delivery_event

У каждого уведомления имеется своя собственная структура, которая содержит подробную информацию о произошедшем событии.

SCTP_ASSOC_CHANGE

Это уведомление сообщает приложению о том, что произошло изменение, связанное с ассоциациями: возникла новая ассоциация или завершилась существующая. Структура данных имеет следующий формат:

struct sctp_assoc_change {

u_int16_t sac_type;

u_int16_t sac_flags;

u_int32_t sac_length;

u_int16_t sac_state;

u_int16_t sac_error;

u_int16_t sac_outbound_streams;

u_int16_t sac_inbound_streams;

sctp_assoc_t sac_assoc_id;

uint8_t sac_info[];

};

Поле

sac_state
определяет тип события, связанного с ассоциацией. Оно может принимать следующие значения:

SCTP_COMM_UP
— создана новая ассоциация. Поля входящих и исходящих потоков (
inbound_streams
и
outbound_streams
) говорят о том, сколько потоков доступно в соответствующих направлениях. Идентификатор ассоциации позволяет взаимодействовать со стеком SCTP;

SCTP_COMM_LOST
— ассоциация закрыта из-за превышения порога недоступности (заданное количество раз был превышен тайм-аут) или собеседник выполнил аварийное закрытие ассоциации (при помощи параметра сокета
SO_LINGER
или вызовом
sendmsg
с флагом
MSG_ABORT
). Пользовательские данные могут быть помещены в поле
sac_info
;

  • Читать дальше
  • 1
  • ...
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: