Шрифт:
Когда интерфейс API сокетов SCTP находился на стадии разработки, для сокетов типа «один-ко-многим» по умолчанию было включено еще и уведомление об установке ассоциации. В более поздних версиях документации API говорится о том, что по умолчанию для сокетов обоих типов отключены все уведомления, за исключением sctp_data_io_event. Однако не все реализации могут соответствовать этому утверждению. Хорошим тоном будет включать все нужные уведомления и отключать ненужные в явном виде. Благодаря этому разработчик получает гарантию того, что приложение будет вести себя так, как он этого хочет, в любой операционной системе.
Типичная временная диаграмма для сокета типа «один-ко-многим» приведена на рис. 9.2. Сначала запускается сервер, который создает сокет, привязывает его к адресу, вызывает функцию
Рис. 9.2. Временная диаграмма работы сокета типа «один-ко-многим»
В этом примере рассматривается последовательный сервер, один программный поток которого обрабатывает сообщения, полученные через несколько ассоциаций. SCTP позволяет использовать сокет типа «один-ко-многим» с функцией
1. Функция
2. Полученный таким образом сокет типа «один-к-одному» может быть передан новому потоку или порожденному процессу (как в модели параллельного сервера).
3. Основной поток обрабатывает сообщения от всех остальных ассоциаций в последовательном режиме.
Сокет SCTP типа «один-ко-многим» является IP-сокетом (семейство
9.3. Функция sctp_bindx
Сервер SCTP может привязаться к некоторому подмножеству IP-адресов узла, на котором он запущен. Серверы TCP и UDP могли привязываться либо к одному, либо ко всем адресам узла, но не могли указывать конкретный набор адресов. Функция
Аргумент
Рис. 9.3. Формат упакованного списка адресов для функций SCTP
Количество адресов, передаваемых
Таблица 9.1. Флаги функции sctp_bindx
Значение аргумента flags | Описание |
---|---|
SCTP_BINDX_ADD_ADDR | Добавляет адреса к уже определенным для сокета |
SCTP_BINDX_REM_ADDR | Удаляет адреса из списка адресов сокета |
Функцию