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

Эта разница может быть существенной для протоколов обработки транзакций, которые при восстановлении соединения могут предпринимать разные действия в зависимости от того, было принято конкретное сообщение или нет. Поле ssf_error может содержать код ошибки, относящейся к конкретному уведомлению, или быть нулевым. Поле ssf_info содержит сведения, переданные ядру при отправке данных (например, номер потока, контекст и так далее). Поле ssf_assoc_id содержит идентификатор ассоциации, а в поле ssf_data помещается недоставленное сообщение.

■ SCTP_SHUTDOWN_EVENT

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

struct sctp_shutdown_event {

 uint16_t sse_type;

 uint16_t sse_flags;

 uint32_t sse_length;

 sctp_assoc_t sse_assoc_id;

};

Поле sse_assoc_id содержит идентификатор ассоциации, которая закрывается и потому не может более использоваться для передачи данных.

■ SCTP_ADAPTION_INDICATION

Некоторые реализации поддерживают параметр индикации адаптирующего уровня (adaption layer indication). Этот параметр передается в пакетах INIT и INIT-ACK и уведомляет собеседника о выполняемой адаптации приложения. Уведомление имеет следующий формат:

struct sctp_adaption_event {

 u_int16_t sai_type;

 u_int16_t sai_flags;

 u_int32_t sai_length;

 u_int32_t sai_adaption_ind;

 sctp_assoc_t sai_assoc_id;

};

Поле sai_assoc_id содержит обычный идентификатор ассоциации. Поле sai_adaption_ind представляет собой 32-разрядное целое число, переданное собеседником локальной конечной точке в сообщении INIT или INIT-ACK. Уровень адаптации для исходящих сообщений устанавливается при помощи параметра сокета SCTP_ADAPTION_LAYER (см. раздел 7.10). Все это описано в стандарте [116], а пример использования параметра для удаленного прямого доступа к памяти и прямой записи данных описывается в [115].

■ SCTP_PARTIAL_DELIVERY_EVENT

Интерфейс частичной доставки используется для передачи больших сообщений пользователю через буфер сокета. Представьте, что процесс отправил сообщение размером 4 Мбайт. Сообщение такого размера может сильно перегрузить системные ресурсы. Реализация SCTP не смогла бы обработать такое сообщение, если бы у нее не было механизма доставки сообщений по частям до полного их получения. Реализация, обеспечивающая частичную доставку, называется интерфейсом частичной доставки (partial delivery API). SCTP передает данные приложению, не устанавливая флаги в поле msg_flags до тех пор, пока не будет готов последний сегмент сообщения. Для этого сегмента устанавливается флаг MSG_EOR (конец записи). Обратите внимание, что если приложение рассчитывает принимать большие сообщения, оно должно использовать функции recvmsg и sctp_recvmsg, чтобы иметь возможность проверять поле msg_flags на наличие флага окончания записи.

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

struct sctp_pdapi_event {

 uint16_t pdapi_type;

 uint16_t pdapi_flags;

 uint32_t pdapi_length;

 uint32_t pdapi_indication;

 sctp_assoc_t pdapi_assoc_id;

};

Идентификатор pdapi_assoc_id указывает на ассоциацию, к которой относится принятое уведомление. Поле pdapi_indication содержит сведения о произошедшем событии. На данный момент поле может иметь единственное значение SCTP_PARTIAL_DELIVERY_ABORTED, указывающее на аварийное завершение частичной доставки сообщения, обрабатываемого в данный момент.

9.15. Резюме

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

Все книги серии Мастер-класс

Секреты резьбы по дереву
Секреты резьбы по дереву

Изделия из древесины и материалов, имитирующих ее текстуру, привычным образом окружают нас в повседневной жизни, поэтому мы относимся к ней как к чему-то обыденному. Но как только ее коснется умелая рука мастера резьбы по дереву, рождается произведение искусства и раскрываются такие качества древесины, как богатая фактура, разнообразие цветов, особая теплота. Эта книга поможет читателю открыть для себя удивительный мир творчества и познать секреты резьбы по дереву. Автор надеется, что начинающие резчики найдут в ней интересный и полезный материал, который позволит им стать мастерами. В приложении представлены рисунки орнаментов и различных узоров, которые на первых порах можно копировать, а по мере приобретения навыка на их основе разрабатывать свои образцы.

Галина Алексеевна Серикова

Сделай сам / Хобби и ремесла / Руководства / Дом и досуг / Словари и Энциклопедии

Похожие книги