Читаем UNIX: разработка сетевых приложений полностью

Здесь sockfd— дескриптор сокета, с параметрами которого хочет работать пользователь. Аргумент assoc_idзадает идентификатор ассоциации, которую нужно выделить из списка всех ассоциаций данного сокета. Аргумент optзадает параметр сокета для SCTP (список параметров приводится в разделе 7.10). Arg— аргумент параметра сокета, siz— указатель на переменную типа socklen_t, в которой хранится размер аргумента параметра сокета.

9.12. Функция sctp_peeloff

Как отмечалось ранее, любую ассоциацию, установленную через сокет типа «один- ко-многим», можно выделить в собственный сокет типа «один-к-одному». По семантике новая функция подобна acceptс дополнительным аргументом. Процесс передает дескриптор sockfdсокета типа «один-ко-многим» и идентификатор idвыделяемой ассоциации. Функция возвращает дескриптор нового сокета. Этот дескриптор имеет тип «один-к-одному», и он изначально связан с выбранной ассоциацией.

int sctp_peeloff(int sockfd, sctp_assoc_t id);


Возвращает: дескриптор нового сокета в случае успешного завершения, -1 в случае ошибки

9.13. Функция shutdown

Обсуждавшаяся в разделе 9.6 функция shutdownможет использоваться с конечной точкой SCTP, использующей интерфейс типа «один-к-одному». Поскольку архитектура SCTP не предусматривает наполовину закрытого состояния, реакция на вызов shutdownконечной точки SCTP отличается от реакции TCP. Когда конечная точка SCTP инициирует процедуру завершения ассоциации, оба собеседника должны закончить передачу данных, находящихся в очереди, после чего закрыть ассоциацию. Конечная точка, выполнявшая активное открытие, может вызвать shutdownвместо closeдля того, чтобы впоследствии подключиться к новому собеседнику. В отличие от TCP, закрывать сокет функцией close, а затем создавать его снова здесь не требуется. SCTP разрешает конечной точке вызвать shutdown, а после завершения этой функции — открывать новые ассоциации через тот же сокет. Обратите внимание, что если конечная точка не дождется завершения последовательности закрытия ассоциации, установка нового соединения закончится неудачей. На рис. 9.4 приведена типичная временная диаграмма вызовов для этого сценария.

Рис. 9.4. Закрытие ассоциации SCTP вызовом shutdown

Обратите внимание, что на рис. 9.4 мы подразумеваем, что процесс подписан на события MSG_NOTIFICATION. Если же он не подписался на эти события, функция readсчитает нулевое количество байтов. Результаты вызова shutdown для TCP были описаны в разделе 6.6. В документации howtoна функцию shutdownдля SCTP перечислены следующие константы:

  SHUT_RD— та же семантика, что и для TCP (см. раздел 6.6); никаких особых действий протокол SCTP не предусматривает;

  SHUT_WR— запрещает отправку сообщений и инициирует процедуру завершения ассоциации SCTP. Этот параметр не дает возможности работать в наполовину закрытом состоянии, однако позволяет локальной конечной точке считать все данные, которые собеседник отправит до получения сообщения SCTP SHUTDOWN;

  SHUT_RDWR— запрещает вызовы read и write и инициирует процедуру завершения ассоциации SCTP. Данные, передававшиеся в момент вызова shutdownна локальную конечную точку, будут подтверждены и сброшены без всякого уведомления процесса.

9.14. Уведомления

SCTP предоставляет разработчику приложений большое количество разнообразных уведомлений. С их помощью процесс может отслеживать состояние ассоциаций, с которыми он работает. Уведомления сообщают о событиях транспортного уровня, включая изменения состояния сети, установку ассоциаций, протокольные ошибки удаленного узла и неудачи при доставке сообщений. По умолчанию уведомления обо всех событиях отключены для сокетов обоих типов. Исключение делается для события sctp_data_io_event. Пример использования уведомлений будет приведен в разделе 23.7.

Параметр сокета SCTP_EVENTSпозволяет подписаться на восемь событий. Из них семь штук генерируют дополнительные данные, которые процесс может получить через обычный дескриптор сокета. Уведомления добавляются к обычным данным, приходящим на соответствующий сокет, по мере того, как происходят события, генерирующие эти уведомления. При чтении из сокета, для которого включена подписка на уведомления, пользовательские данные и сообщения смешиваются друг с другом. Чтобы различить их, процесс должен использовать функции recvmsgили sctp_recvmsg. Для уведомлений о событиях поле msg_flagsсодержит флаг MSG_NOTIFICATION. Этот флаг говорит приложению о том, что считанное сообщение представляет собой не обычные данные, принятые от собеседника, а уведомление о каком-либо событии от локального стека SCTP.

Перейти на страницу:

Похожие книги

1001 совет по обустройству компьютера
1001 совет по обустройству компьютера

В книге собраны и обобщены советы по решению различных проблем, которые рано или поздно возникают при эксплуатации как экономичных нетбуков, так и современных настольных моделей. Все приведенные рецепты опробованы на практике и разбиты по темам: аппаратные средства персональных компьютеров, компьютерные сети и подключение к Интернету, установка, настройка и ремонт ОС Windows, работа в Интернете, защита от вирусов. Рассмотрены не только готовые решения внезапно возникающих проблем, но и ответы на многие вопросы, которые возникают еще до покупки компьютера. Приведен необходимый минимум технических сведений, позволяющий принять осознанное решение.Компакт-диск прилагается только к печатному изданию книги.

Юрий Всеволодович Ревич

Программирование, программы, базы данных / Интернет / Компьютерное «железо» / ОС и Сети / Программное обеспечение / Книги по IT
Access 2002: Самоучитель
Access 2002: Самоучитель

В книге рассматривается широкий круг вопросов, связанных с использованием программной среды Access 2002, которая является составной частью пакета Office 2002 и предназначена для создания банка данных в самых различных предметных областях.Подробно описывается методика проектирования объектов базы данных (таблицы, формы, отчеты, страницы доступа к данным, запросы, модули).Детально обсуждаются вопросы создания интегрированной базы данных в единой среде Access 2002: формирование БД с нуля, конвертирование в программную среду баз данных, созданных в ином программном окружении – Clarion, FoxPro.Особое внимание уделяется формированию разнообразных запросов к интегрированной базе данных Access 2002 с использованием языков программирования SQL, VBA и макросов.Приводятся общие сведения о возможностях языка обмена данными между различными компьютерами и приложениями (XML). Описываются возможности использования гиперссылок, связывающих базу данных с другими программными продуктами. Объясняется, как можно работать с базой данных Access 2002 без установки ее на компьютер, используя технологию ODBC (Open Data Base Connectivity). В приложениях приводятся количественные параметры Access 2002 и связанная с этой СУБД терминология.Предлагаемая книга будет полезна специалистам, занимающимся практической разработкой банков данных и приложений на их основе, а также студентам вузов, изучающим информатику.

Павел Юрьевич Дубнов

Программирование, программы, базы данных / ОС и Сети / Книги по IT
Недокументированные и малоизвестные возможности Windows XP
Недокументированные и малоизвестные возможности Windows XP

Книга содержит подробные сведения о таких недокументированных или малоизвестных возможностях Windows XP, как принципы работы с программами rundll32.exe и regsvr32.exe, написание скриптов сервера сценариев Windows и создание INF-файлов. Р' ней приведено описание оснасток, изложены принципы работы с консолью управления mmc.exe и параметрами реестра, которые изменяются с ее помощью. Кроме того, рассмотрено большое количество средств, позволяющих выполнить тонкую настройку Windows XP.Эта книга предназначена для опытных пользователей и администраторов, которым интересно узнать о нестандартных возможностях Windows. Тем более что довольно часто эти возможности позволяют обойти ограничения на те или иные функции Windows, установленные администратором. Р

Роман Александрович Клименко

ОС и Сети, интернет / ОС и Сети / Книги по IT