23.8. Определение идентификатора ассоциации по IP-адресу

23.8. Определение идентификатора ассоциации по IP-адресу

Модифицированный клиент из раздела 23.7 использовал уведомления в качестве сигнала для получения списков адресов. Это было достаточно удобно, поскольку идентификатор ассоциации, для которой требовалось получить адреса, содержался в уведомлении в поле sac_assoc_id. Но что если приложение не отслеживает идентификаторы ассоциаций, а ему вдруг понадобилось определить какой- либо идентификатор по адресу собеседника? В листинге 23.13 представлена простая функция, преобразующая адрес собеседника в идентификатор ассоциации. Эта функция будет использоваться сервером из раздела 23.10.

Листинг 23.13. Преобразование адреса в идентификатор ассоциации

//sctp/sctp_addr_to_associd.с

 1 #include "unp.h"

 2 sctp_assoc_t

 3 sctp_address_to_associd(int sock_fd, struct sockaddr *sa, socklen_t salen)

 4 {

 5  struct sctp_paddrparams sp;

 6  int siz;

 7  siz = sizeof(struct sctp_paddrparams);

 8  bzero(&sp, siz);

 9  memcpy(&sp, spp_address, sa.salen);

10  sctp_opt_info(sock_fd, 0, SCTP_PEER_ADDR_PARAMS, &sp, &siz);

11  return(sp.spp_assoc_id);

12 }

Инициализация

7-8 Функция начинает работу с инициализации структуры sctp_paddrparams.

Копирование адреса

9 Мы копируем адрес в структуру sctp_paddrparams, используя переданную нам вызвавшим процессом информацию о длине этого адреса.

Вызов параметра сокета

10 При помощи параметра сокета SCTP_PEER_ADDR_PARAMS наша функция запрашивает параметры адреса собеседника. Обратите внимание, что мы используем sctp_opt_info вместо getsockopt, потому что параметр SCTP_PEER_ADDR_PARAMS требует копирования аргументов как в ядро, так и из ядра. Вызов, который мы делаем, возвратит нам текущий интервал проверки работоспособности соединения, максимальное количество попыток повторной передачи перед принятием решения о признании адреса собеседника отказавшим, и, что самое важное, идентификатор ассоциации. Мы не проверяем возвращаемое значение, потому что если вызов оказывается неудачным, мы хотим вернуть 0.

11 Функция возвращает идентификатор ассоциации. Если вызов sctp_opt_info оказался неудачным, обнуление структуры гарантирует, что вызвавший нашу функцию процесс получит 0. Идентификатор ассоциации нулевым быть не может. Это значение используется реализацией SCTP для указания на отсутствие ассоциации.

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

Отношение ассоциации

Из книги Самоучитель UML автора Леоненков Александр

Отношение ассоциации Отношение ассоциации является одним из фундаментальных понятий в языке UML и в той или иной степени используется при построении всех графических моделей систем в форме канонических диаграмм.Применительно к диаграммам вариантов использования оно


Отношение ассоциации

Из книги Советы по Delphi. Версия 1.0.6 автора Озеров Валентин

Отношение ассоциации Отношение ассоциации соответствует наличию некоторого отношения между классами. Данное отношение обозначается сплошной линией с дополнительными специальными символами, которые характеризуют отдельные свойства конкретной ассоциации. В качестве


12.4.2. Виртуальные серверы с идентификацией по IP-адресу

Из книги Интернет. Новые возможности. Трюки и эффекты [litres] автора Баловсяк Надежда Васильевна

12.4.2. Виртуальные серверы с идентификацией по IP-адресу В директиве VirtualHost в качестве адресов можно использовать доменные имена, но лучше указывать IP-адрес, причем действительный, а не виртуальный. В этом случае вы не будете зависеть от DNS при разрешении имени. Также


Поиск в Google по электронному адресу

Из книги Инфраструктуры открытых ключей автора Полянская Ольга Юрьевна

Поиск в Google по электронному адресу Специальный инструмент Google под названием Google Alerts (веб-сайт http://www.google.com/alerts) позволяет получать результаты поиска по указанному электронному адресу. Для этого необходимо указать нужный поисковый запрос, задать тип поиска (новости, поиск


Идентифицируем нового знакомого Поиск информации о человеке по почтовому адресу

Из книги Разработка приложений в среде Linux. Второе издание автора Джонсон Майкл К.

Идентифицируем нового знакомого Поиск информации о человеке по почтовому адресу Информацию о человеке в Cети можно найти в самых разных местах: на его персональной странице, во всевозможных гостевых книгах, каталогах адресов, досках объявлений и веб-конференциях, в


Ассоциации доверия

Из книги Linux: Полное руководство автора Колисниченко Денис Николаевич

Ассоциации доверия В повседневной жизни люди часто допускают транзитивные отношения доверия. Например, если наш друг дает хорошую рекомендацию человеку, которого мы не знаем, то мы обычно склонны относится к этому незнакомцу с большим доверием, чем если бы познакомились


28.1. Преобразование идентификатора в имя

Из книги Недокументированные и малоизвестные возможности Windows XP автора Клименко Роман Александрович

28.1. Преобразование идентификатора в имя В результате выполнения команды ls -l для вывода списка содержимого текущего каталога в третьей и четвертой колонках указываются идентификаторы (ID) пользователя и группы, к которой принадлежит каждый файл. Этот список выглядит


16.9.2. Виртуальные серверы с идентификацией по IP-адресу

Из книги UNIX: разработка сетевых приложений автора Стивенс Уильям Ричард

16.9.2. Виртуальные серверы с идентификацией по IP-адресу В директиве VirtualHost в качестве адресов можно использовать доменные имена, но лучше указывать IP-адрес, причем действительный, а не виртуальный. В этом случае вы не будете зависеть от DNS при разрешении имени. Также


Раздел идентификатора

Из книги Разработка ядра Linux автора Лав Роберт

Раздел идентификатора Теперь поговорим о содержимом второго раздела, используемого для описания расширения.Кроме разделов идентификаторов для расширений файлов, в системе также существуют стандартные идентификаторы Windows, описывающие такие объекты, как папка, диск,


Параметры раздела идентификатора

Из книги Описание языка PascalABC.NET автора Коллектив РуБоард

Параметры раздела идентификатора Раздел идентификатора может содержать следующие параметры.? EditFlags — данный параметр DWORD-типа определяет различные ограничения на модификацию параметров данного расширения при помощи вкладки Типы файлов диалога Свойства папки.


Разделы ветви идентификатора

Из книги автора

Разделы ветви идентификатора Раздел идентификатора, кроме параметров, может включать в себя и другие разделы — они определяют значок, используемый для файлов с данным расширением, текущую версию идентификатора, а также сами команды контекстного меню файла. Рассмотрим


Завершение ассоциации

Из книги автора

Завершение ассоциации В отличие от TCP, SCRIPT не имеет состояния, соответствующего частично закрытой ассоциации. Когда один узел закрывает ассоциацию, второй узел должен перестать отправлять новые данные. Получатель запроса на закрытие ассоциации отправляет те данные,


Использование идентификатора UID в качестве условия

Из книги автора

Использование идентификатора UID в качестве условия Если разрабатываемый код связан с контекстом процесса, то иногда появляется возможность выполнить альтернативную реализацию не "ломая" существующий код. Это важно, если необходимо переписать важный системный вызов и


Область действия идентификатора

Из книги автора

Область действия идентификатора Любой используемый в программе идентификатор должен быть предварительно описан. Идентификаторы описываются в разделе описаний. Идентификаторы для переменных могут также описываться внутри блока.Основная программа, подпрограмма, блок,