UNIX: разработка сетевых приложений
struct sctp_paddrparams {sctp_assoc_t spp_assoc_id;struct sockaddr_storage spp_address;u_int32_t spp_hbinterval;u_int16_t spp_pathmaxrxt;};Поля структуры имеют следующий смысл:
■
содержит идентификатор ассоциации, параметры которой считываются или устанавливаются. Если это значение равно нулю, приложение будет работать с параметрами по умолчанию, а не с конкретной ассоциацией;spp_assoc_id■
указывает IP-адрес, для которого запрашиваются или устанавливаются параметры. Если значение поля равно нулю, оно игнорируется;spp_address■
задает интервал между проверочными сообщениями (heartbeats). Значениеspp_hbintervalотключает проверочные сообщения. ЗначениеSCTP_NO_HBприводит к внеочередной отправке проверочного сообщения. Все остальные значения задают интервал проверки в миллисекундах. При установке параметров по умолчанию задание константыSCTP_ISSUE_HBне допускается;SCTP_ISSUE_HB■
определяет максимальное количество повторных передач, после которых адресат считается недоступным (spp_hbpathmaxrxt). Если основной адрес собеседника признается недоступным, в качестве нового основного адреса выбирается один из доступных адресов.INACTIVEПараметр сокета SCTP_PRIMARY_ADDR
Параметр позволяет узнать или установить адрес, используемый локальной конечной точкой SCTP в качестве основного. Основной адрес используется в качестве адреса назначения во всех сообщениях, передаваемых собеседнику. Приложение должно заполнить структуру
идентификатором ассоциации и адресом собеседника.sctp_setprimstruct sctp_setprim {sctp_assoc_t ssp_assoc_id;struct sockaddr_storage ssp_addr;};Поля структуры имеют следующий смысл:
■
указывает идентификатор ассоциации, для которой следует установить или считать основной адрес. В случае сокета типа «один-к-одному» это поле игнорируется;ssp_assoc_id■
определяет основной адрес, который обязательно должен принадлежать собеседнику. Если используется функцияssp_addr, значение поля трактуется как новый основной адрес собеседника.setsockoptПолучение значения этого параметра для сокета типа «один-к-одному» с единственным локальным адресом эквивалентно вызову функции
.getsocknameПараметр сокета SCTP_RTOINFO
Параметр используется для считывания и установки различных тайм-аутов для конкретной ассоциации или используемых по умолчанию для конечной точки. Для считывания параметров по соображениям переносимости следует использовать функцию
, а неsctp_opt_info. Перед вызовом необходимо заполнить структуруgetsockopt, которая определяется следующим образом:sctp_rtoinfostruct sctp_rtoinfo {sctp_assoc_t srto_assoc_id;uint32_t srto_initial;uint32_t srto_max;uint32_t srto_min;};Поля структуры имеют следующий смысл:
■
содержит либо идентификатор конкретной ассоциации, либо 0. В последнем случае работа осуществляется со значениями по умолчанию;srto_assoc_id■
хранит начальное значение RTO для конкретного адреса собеседника. Это значение используется при отправке порции INIT. Измеряется поле в миллисекундах и по умолчанию равно 3000;srto_initial■
содержит максимальное значение RTO, используемое при изменении таймера повторной передачи. Если рассчитанное значение оказывается больше максимального RTO, в качестве нового тайм-аута используется именно максимальное значение. По умолчанию это поле имеет значение 60 000 мс;srto_max■
содержит минимальное значение RTO, используемое при первом запуске таймера повторной передачи. Когда таймер RTO изменяется, новое значение обязательно сравнивается с минимальным. По умолчанию это поле имеет значение 1000 мс.srto_minЗапись 0 в поля
,srto_initialиsrto_maxозначает, что менять текущие параметры по умолчанию не требуется. Все значения измеряются в миллисекундах. Руководство по установке таймеров для достижения максимальной производительности приводится в разделе 23.11.srto_minПараметр сокета SCTP_SET_PEER_PRIMARY_ADDR
Установка этого параметра приводит к отправке собеседнику сообщения, запрашивающего установку конкретного локального адреса в качестве основного. Процесс должен заполнить структуру
и указать в ней идентификатор ассоциации и локальный адрес, который должен быть сделан основным. Этот адрес должен быть привязан к данной конечной точке. Структураsctp_setpeerprimопределяется следующим образом:sctp_setpeerprimstruct sctp_setpeerprim {sctp_assoc_t sspp_assoc_id;struct sockaddr_storage sspp_addr;};Ниже приводится описание полей структуры.
■
указывает идентификатор ассоциации, для которой требуется установить новый основной адрес. При работе с сокетом типа «один-к-одному» это поле игнорируется;sspp_assoc_id■
содержит локальный адрес, который должен использоваться собеседником в качестве основного.sspp_addrПоддержка этой функции SCTP не является обязательной. Если локальная конечная точка не поддерживает параметр, процессу будет возвращена ошибка EOPNOTSUPP. Если же параметр не поддерживается удаленной конечной точкой, ошибка будет другой: EINVAL. Обратите внимание, что данный параметр не может использоваться для считывания основного адреса; он служит только для установки нового адреса в качестве основного.
Параметр сокета SCTP_STATUS
Этот параметр сокета служит для получения информации о текущем статусе ассоциации SCTP. Для обеспечения максимальной переносимости пользуйтесь функцией
, а неsctp_opt_info. Приложение должно предоставить структуруgetaddrinfo, указав идентификатор ассоциацииsctp_status. Структура будет заполнена информацией о выбранной ассоциации и возвращена приложению. Формат структурыsstat_assoc_idтаков:sctp_status