UNIX: разработка сетевых приложений
struct sctp_assocparams {sctp_assoc_t sasoc_assoc_id;uint16_t sasoc_asocmaxrxt;uint16_t sasoc_number_peer_destinations;uint32_t sasoc_peer_rwnd;uint32_t sasoc_local_rwnd;uint32_t sasoc_cookie_life;};Поля структуры имеют следующий смысл:
■
хранит идентификатор ассоциации. Если при вызовеsasoc_assoc_idпараметр установлен в нуль, поляsetsockoptиsasoc_asocmaxrxtтрактуются как новые значения по умолчанию для сокета. Вызовsasoc_cookie_lifeвернет сведения об ассоциации, если при вызове указать ее идентификатор; если же поле оставить нулевым, будут возвращены значения по умолчанию;getsockopt■
хранит количество повторных передач без получения подтверждений. При превышении этого ограничения передача прекращается, ассоциация закрывается и SCTP сообщает приложению о недоступности собеседника;sasoc_asocmaxrxt■
хранит количество адресов собеседника. Этот параметр может быть только считан, но не установлен;sasoc_number_peer_destinations■
хранит текущее рассчитанное окно приема собеседника, то есть количество байтов, которые могут быть переданы в данный момент. Это поле изменяется динамически. Когда приложение отправляет данные, значение поля уменьшается, когда удаленное приложение считывает полученные данные, значение увеличивается. Вызовом данного параметра сокета это значение изменено быть не может;sasoc_peer_rwnd■
хранит размер локального окна приема, о котором SCTP оповещает собеседника. Это значение также изменяется динамически и зависит от параметра сокетаsasoc_local_rwnd. Вызовом параметраSO_SNDBUFлокальное окно изменено быть не может;SCTP_ASSOCINFO■
хранит срок действияsasoc_cookie_life, выданного собеседнику (в миллисекундах). Каждомуcookieприсваивается определенный срок действия, благодаря чему обеспечивается защита от атак, основанных на повторах. Значение по умолчанию равно 60 000 и может быть изменено установкой нужного значения в данном поле при условии, что в полеcookieзаписано значение 0.sasoc_assoc_idРекомендации по настройке
для оптимальной производительности приводятся в разделе 23.11. Для защиты от атак, основанных на повторе, значениеsasoc_asocmaxrxtможно уменьшить, но при этом система окажется менее устойчивой к задержкам в процессе инициации. Прочие поля полезны для отладки программ.sasoc_cookie_lifeПараметр сокета SCTP_AUTOCLOSE
Этот параметр позволяет получать и устанавливать время автоматического закрытия конечной точки SCTP. Это время задается в секундах и определяет длительность существования ассоциации SCTP, по которой не передаются никакие данные. Передача данных контролируется стеком SCTP. По умолчанию функция автоматического закрытия отключена.
Параметр предназначен для использования на интерфейсах SCTP типа «один-ко-многим» (см. главу 9). Положительное значение соответствует времени поддержания неиспользуемой ассоциации в секундах, а нулевое отключает функцию автоматического закрытия. Установка параметра влияет только на будущие ассоциации, все существующие ассоциации сохраняют старые значения.
Автоматическое закрытие может использоваться сервером для закрытия неиспользуемых ассоциаций без дополнительных затрат на хранение информации о состоянии. Однако разработчик сервера должен тщательно оценить максимальную продолжительность бездействия клиентов. Если значение параметра окажется недостаточно большим, ассоциации будут закрываться слишком рано.
Параметр сокета SCTP_DEFAULT_SEND_PARAM
SCTP поддерживает множество дополнительных параметров отправки, которые обычно передаются в виде вспомогательных данных или используются при вызове функции
(который часто реализуется как библиотечный вызов, передающий вспомогательные данные пользователя). Приложение, планирующее отправку большого количества сообщений с одинаковыми параметрами, может воспользоваться параметромsctp_sendmsgдля настройки значений параметров по умолчанию и тем самым избавиться от необходимости добавлять вспомогательные данные или вызыватьSCTP_DEFAULT_SEND_PARAM. На вход параметра поступает структураsctp_sendmsg:sctp_sndrcvinfostruct sctp_sndrcvinfo {u_int16_t sinfo_stream;u_int16_t sinfo_ssn;u_int16_t sinfo_flags;u_int32_t sinfo_ppid;u_int32_t sinfo_context;u_int32_t sinfo_timetolive;u_int32_t sinfo_tsn;u_int32_t sinfo_cumtsn;sctp_assoc_t sinfo_assoc_id;};Поля структуры определяются следующим образом:
■
задает поток, в который по умолчанию направляются все сообщения;sinfo_stream■
игнорируется при установке значений параметров по умолчанию. При получении сообщений функциейsinfo_ssnилиrecvmsgэто поле содержит значение потокового последовательного номера (stream sequence number, SSN), помещенное собеседником в порцию данных;sctp_recvmsg■
устанавливает значения всех флагов для будущих сообщений. Допустимые значения флагов приводятся в табл. 7.5;sinfo_flags■
задает значение идентификатора протокола SCTP для всех будущих передач данных;sinfo_ppid■
задает значение по умолчанию для поляsinfo_context, которое является локальной меткой для сообщений, которые не могли быть доставлены собеседнику;sinfo_context■
определяет время жизни отправляемых сообщений. Поле времени жизни используется стеком SCTP для того, чтобы сбрасывать сообщения, задержавшиеся в буфере отправки на слишком большой срок и не переданные ни разу. Если обе конечные точки поддерживают режим частичной надежности, параметр времени жизни влияет и на количество попыток повторной передачи, ограничивая их срок;sinfo_timetolive■
игнорируется при установке параметров по умолчанию. При получении сообщений функциейsinfo_tsnилиrecvmsgэто поле содержит значение транспортного последовательного номера (transport sequence number, TSN), помещенное собеседником в порцию данных SCTP;sctp_recvmsg