UNIX: разработка сетевых приложений
};Приложению возвращаются следующие сведения:
■
содержит информацию об идентификаторе ассоциации, которая доставляется также в уведомлении об установке ассоциации (spinfo_assoc_id). Уникальный идентификатор ассоциации может использоваться для обращения к ней в большинстве функций SCTP;SCTP_COMM_UP■
позволяет приложению указать конкретный адрес собеседника, для которого оно хочет получить сведения. По возвращении изspinfo_addressилиgetsockoptзначение структуры должно оставаться неизменным;sctp_opt_info■
может содержать одно или несколько значений (табл. 7.7).spinfo_stateТаблица 7.7. Состояния адреса собеседника SCTP
Константа Описание SCTP_ACTIVE Адрес активен и доступен SCTP_INACTIVE В настоящий момент адрес недоступен SCTP_ADDR_UNCONFIRMED Доставка данных или проверочных сообщений на данный адрес не была подтверждена Неподтвержденным считается адрес, перечисленный собеседником в списке действующих, но не проверенный локальным SCTP. Для проверки адреса требуется, чтобы отправленные на него данные или проверочные сообщения были подтверждены. Для непроверенного адреса не может быть указано корректное значение тайм-аута повторной передачи (RTO). Активными считаются адреса, доступные для передачи данных.
■
хранит текущий размер окна приема для данного адреса. Описание процедуры расчета параметра cwnd приводится в [117, с. 177];spinfo_cwnd■
хранит текущую оценку сглаженного RTT для данного адреса;spinfo_srtt■
хранит текущее значение тайм-аута повторной передачи для данного адреса;spinfo_rto■
хранит текущую транспортную MTU, определенную по соответствующему алгоритму.spinfo_mtuПараметр полезно использовать для получения идентификатора ассоциации по структуре с IP-адресом собеседника. Это будет продемонстрировано в главе 23. Кроме того, приложение может отслеживать функционирование всех адресов собеседника с несколькими интерфейсами и выбирать лучший из них в качестве адреса по умолчанию. Наконец, все эти сведения полезны для ведения журналов и отладки.
Параметр сокета SCTP_I_WANT_MAPPED_V4_ADDR
Этот флаг позволяет включать и отключать отображение адресов IPv4 для сокетов типа
. Если параметр включен (а по умолчанию это именно так), все адреса IPv4 преобразуются в адреса IPv6 перед отправкой приложению. Если же параметр отключен, сокет SCTP не будет отображать адреса IPv4, а вместо этого будет просто передавать их в структуреAF_INET6.sockaddr_inПараметр сокета SCTP_INITMSG
Параметр позволяет устанавливать и считывать параметры инициализации, по умолчанию применяемые к сокетам при отправке сообщения INIT. Вместе с параметром передается структура
, определяемая следующим образом:sctp_initmsgstruct sctp_initmsg {uint16_t sinit_num_ostreams;uint16_t sinit_max_instreams;uint16_t sinit_max_attempts;uint16_t sinit_max_init_timeo;};Поля структуры определяются следующим образом:
■
содержит количество исходящих потоков SCTP, запрашиваемое приложением. Это значение не подтверждается, пока не будет завершено рукопожатие, и может быть уменьшено в соответствии с возможностями собеседника;sinit_num_ostreams■
отражает максимальное количество входящих потоков, которое готово обеспечить приложение. Это значение может быть перекрыто стеком SCTP, если оно превышает максимальное количество потоков, поддерживаемое самим стеком;sinit_max_instreams■
выражает количество попыток передачи начального сообщения INIT перед тем, как собеседник будет признан недоступным;sinit_max_attempts■
задает максимальный тайм-аут повторной передачи для сообщений INIT. Это значение используется вместоsinit_max_init_timeoв качестве ограничения сверху на тайм-аут повторной передачи. Выражается в миллисекундах.RTO_MAXОбратите внимание, что установленные в 0 поля структуры игнорируются сокетом SCTP. При использовании сокета типа «один-ко-многим» (см. раздел 9.2) приложение может передать структуру
во вспомогательных данных при неявной установке ассоциации.sctp_initmsgПараметр сокета SCTP_MAXBURST
Этот параметр позволяет приложению устанавливать и считывать максимальный размер набора пакетов (maximum burst size). SCTP никогда не отправляет более, чем
пакетов одновременно, что предотвращает переполнение сети. Ограничение может применяться либо путем уменьшения окна до текущего количества пакетов «в пути» (in flight) плюс максимальный размер набора, помноженный на транспортную MTU, либо в качестве отдельного параметра, если при каждой возможности отправки будет пересылаться не болееSCTP_MAXBURSTпакетов.SCTP_MAXBURSTПараметр сокета SCTP_MAXSEG
Параметр позволяет приложению считывать и устанавливать максимальный размер фрагмента, аналогично
(см. раздел 7.8).TCP_MAXSEGКогда стек SCTP получает от приложения-отправителя сообщение, размер которого превышает значение этого параметра, это сообщение разбивается на несколько фрагментов, которые доставляются на вторую конечную точку по отдельности. Обычно SCTP создает фрагменты такого размера, чтобы они не превышали минимальную MTU для всех адресов собеседника. Параметр позволяет еще сильнее уменьшить это значение. Учтите, что стек SCTP может фрагментировать даже такое сообщение, размер которого не превышает
. Это произойдет в том случае, если MTU для одного из адресов собеседника окажется меньше значенияSCTP_MAXSEG.SCTP_MAXSEGПараметр действует для всех адресов конечной точки и может влиять на несколько ассоциаций при работе с интерфейсами типа «один-ко-многим».
Параметр сокета SCTP_NODELAY
Установка параметра отключает алгоритм Нагла протокола SCTP. По умолчанию параметр выключен, то есть алгоритм Нагла включен. С протоколом SCTP этот алгоритм работает так же, как и с TCP, за тем исключением, что он пытается объединять порции данных, а не отдельные байты. Подробнее см. описание параметра
.TCP_NODELAYПараметр сокета SCTP_PEER_ADDR_PARAMS
Параметр позволяет приложению считывать и устанавливать различные параметры ассоциации. Приложение должно заполнить поле идентификатора ассоциации в структуре
и передать ее вместе с параметром сокета. Формат структуры приведен ниже:sctp_paddrparams