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

На нашем литературном портале можно бесплатно читать книгу UNIX: разработка сетевых приложений, Стивенс Уильям Ричард-- . Жанр: ОС и Сети. Онлайн библиотека дает возможность прочитать весь текст и даже без регистрации и СМС подтверждения на нашем литературном портале bazaknig.info.
UNIX: разработка сетевых приложений
Название: UNIX: разработка сетевых приложений
Дата добавления: 16 январь 2020
Количество просмотров: 771
Читать онлайн

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

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

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

Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала

Перейти на страницу:

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
;

 □ 

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

 □ 

SCTP_SHUTDOWN_COMP
— закончено завершение соединения, инициированное локальной конечной точкой (вызовом
shutdown
или
sendmsg
с флагом
MSG_EOF
). После получения этого сообщения сокет типа «один-к-одному» может быть использован для подключения к другому собеседнику;

 □ 

SCTP_CANT_STR_ASSOC
— собеседник не ответил при попытке установления ассоциации.

Поле

sac_error
содержит коды причин ошибок протокола SCTP, которые могли привести к изменению состояния ассоциации. Поля
sac_inbound_streams
и
sac_outbound_streams
говорят о том, какое количество потоков в каждом направлении было согласовано во время установки ассоциации. Поле sac_
assoc
_id содержит уникальный идентификатор ассоциации, который может использоваться как при работе с параметрами сокета, так и в последующих уведомлениях. Наконец, поле
sac
_info может содержать дополнительные пользовательские сведения. Например, если ассоциация была разорвана собеседником в связи с ошибкой, определенной пользователем, код этой ошибки будет помещен в поле
sac_info
.

■ 

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

struct sctp_paddr_change {

 u_int16_t spc_type;

 u_int16_t spc_flags;

 u_int32_t spc_length;

 struct sockaddr_storage spc_aaddr;

 u_int32_t spc_state;

 u_int32_t spc_error;

 sctp_assoc_t spc_assoc_id;

};

Поле

spc_aaddr
содержит адрес собеседника, с которым связано данное событие. Поле
spc_state
может принимать одно из значений, перечисленных в табл. 9.3.

Таблица 9.3. Уведомление о состоянии адреса собеседника

spc_state Значение
SCTP_ADDR_ADDED Адрес добавлен к ассоциации
SCTP_ADDR_AVAILABLE Адрес доступен
SCTP_ADDR_CONFIRMED Адрес подтвержден и считается действующим
SCTP_ADDR_MADE_PRIM Адрес сделан основным
SCTP_ADDR_REMOVED Адрес удален из списка адресов ассоциации
SCTP_ADDR_UNREACHABLE Адрес недоступен
Перейти на страницу:
Комментариев (0)
название