Чтение онлайн

ЖАНРЫ

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

sinit_max_attempts
выражает количество попыток передачи начального сообщения INIT перед тем, как собеседник будет признан недоступным;

sinit_max_init_timeo
задает максимальный тайм-аут повторной передачи для сообщений INIT. Это значение используется вместо
RTO_MAX
в качестве ограничения сверху на тайм-аут повторной передачи. Выражается в миллисекундах.

Обратите внимание, что установленные в 0 поля структуры игнорируются сокетом SCTP. При использовании сокета типа «один-ко-многим» (см. раздел 9.2) приложение может передать структуру

sctp_initmsg
во вспомогательных
данных при неявной установке ассоциации.

Параметр сокета SCTP_MAXBURST

Этот параметр позволяет приложению устанавливать и считывать максимальный размер набора пакетов (maximum burst size). SCTP никогда не отправляет более, чем

SCTP_MAXBURST
пакетов одновременно, что предотвращает переполнение сети. Ограничение может применяться либо путем уменьшения окна до текущего количества пакетов «в пути» (in flight) плюс максимальный размер набора, помноженный на транспортную MTU, либо в качестве отдельного параметра, если при каждой возможности отправки будет пересылаться не более
SCTP_MAXBURST
пакетов.

Параметр сокета SCTP_MAXSEG

Параметр позволяет приложению считывать и устанавливать максимальный размер фрагмента, аналогично

TCP_MAXSEG
(см. раздел 7.8).

Когда стек SCTP получает от приложения-отправителя сообщение, размер которого превышает значение этого параметра, это сообщение разбивается на несколько фрагментов, которые доставляются на вторую конечную точку по отдельности. Обычно SCTP создает фрагменты такого размера, чтобы они не превышали минимальную MTU для всех адресов собеседника. Параметр позволяет еще сильнее уменьшить это значение. Учтите, что стек SCTP может фрагментировать даже такое сообщение, размер которого не превышает

SCTP_MAXSEG
. Это произойдет в том случае, если MTU для одного из адресов собеседника окажется меньше значения
SCTP_MAXSEG
.

Параметр действует для всех адресов конечной точки и может влиять на несколько ассоциаций при работе с интерфейсами типа «один-ко-многим».

Параметр сокета SCTP_NODELAY

Установка параметра отключает алгоритм Нагла протокола SCTP. По умолчанию параметр выключен, то есть алгоритм Нагла включен. С протоколом SCTP этот алгоритм работает так же, как и с TCP, за тем исключением, что он пытается объединять порции данных, а не отдельные байты. Подробнее см. описание параметра

TCP_NODELAY
.

Параметр сокета SCTP_PEER_ADDR_PARAMS

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

sctp_paddrparams
и передать ее вместе с параметром сокета. Формат структуры приведен ниже:

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
содержит идентификатор ассоциации, параметры которой считываются или устанавливаются. Если это значение равно нулю, приложение будет работать с параметрами по умолчанию, а не с конкретной ассоциацией;

spp_address
указывает IP-адрес,
для которого запрашиваются или устанавливаются параметры. Если значение поля равно нулю, оно игнорируется;

spp_hbinterval
задает интервал между проверочными сообщениями (heartbeats). Значение
SCTP_NO_HB
отключает проверочные сообщения. Значение
SCTP_ISSUE_HB
приводит к внеочередной отправке проверочного сообщения. Все остальные значения задают интервал проверки в миллисекундах. При установке параметров по умолчанию задание константы
SCTP_ISSUE_HB
не допускается;

spp_hbpathmaxrxt
определяет максимальное количество повторных передач, после которых адресат считается недоступным (
INACTIVE
). Если основной адрес собеседника признается недоступным, в качестве нового основного адреса выбирается один из доступных адресов.

Параметр сокета SCTP_PRIMARY_ADDR

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

sctp_setprim
идентификатором ассоциации и адресом собеседника.

struct 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_rtoinfo
, которая определяется следующим образом:

struct sctp_rtoinfo {

sctp_assoc_t srto_assoc_id;

uint32_t srto_initial;

uint32_t srto_max;

uint32_t srto_min;

};

Поля структуры имеют следующий смысл:

srto_assoc_id
содержит либо идентификатор конкретной ассоциации, либо 0. В последнем случае работа осуществляется со значениями по умолчанию;

srto_initial
хранит начальное значение RTO для конкретного адреса собеседника. Это значение используется при отправке порции INIT. Измеряется поле в миллисекундах и по умолчанию равно 3000;

Поделиться с друзьями: