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

на главную

Жанры

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

9.5. Функция sctp_getpaddrs

Функция

getpeername
не предназначена для использования протоколом, рассчитанным на работу с многоинтерфейсными узлами. Для сокетов SCTP она способна вернуть лишь основной адрес собеседника. Если нужны все адреса, следует вызывать функцию
sctp_getpaddrs
.

#include <netinet/sctp.h>

int sctp_getpaddrs(int sockfd, sctp_assoc_t id, struct sockadrrd ** addrs);

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

Аргумент

sockfd
представляет собой дескриптор сокета, возвращаемый функцией
socket
. Второй аргумент задает идентификатор ассоциации для сокетов типа «один-ко-многим». Для сокетов типа «один-к-одному» этот аргумент игнорируется.
addrs
— адрес указателя, который функция
sctp_getpaddrs
заполнит упакованным списком адресов, выделив под него локальный буфер (см. рис. 9.3 и листинг 23.12). Для освобождения буфера, созданного
sctp_getpaddrs
, следует использовать вызов
sctp_freepaddrs
.

9.6. Функция sctp_freepaddrs

Функция

sctp_freepaddrs
освобождает ресурсы, выделенные вызовом
sctp_getpaddrs
.

#include <netinet/sctp.h>

void sctp_freepaddrs(struct sockaddr * addrs);

Здесь аргумент

addrs
— указатель на массив адресов, возвращаемый
sctp_getpaddrs
.

9.7. Функция sctp_getladdrs

Функция

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

#include <netinet/sctp.h>

int sctp_getladdrs(int sockfd, sctp_assoc_t id, struct sockaddr ** addrs);

Возвращает: количество локальных адресов, помещенных в addrs, или -1 в случае ошибки.

Здесь

sockfd
— дескриптор сокета, возвращаемый функцией
socket
. Аргумент
id
— идентификатор ассоциации для сокетов типа «один-ко-многим». Поле
id
игнорируется для сокетов типа «один-к-одному». Параметр представляет собой адрес указателя на буфер, выделяемый и заполняемый функцией
sctp_getladdrs
. В этот буфер помещается упакованный список адресов. Структура списка представлена на рис. 9.3 и в листинге 23.12. Для освобождения буфера процесс должен вызвать функцию
sctp_freeladdrs
.

9.8. Функция sctp_freeladdrs

Функция

sctp_freeladdrs
освобождает
ресурсы, выделенные при вызове
sctp_getladdrs
.

#include <netinet/sctp.h>

void sctp_freeladdrs(struct sockaddr * addrs);

Здесь

addrs
указывает на список адресов, возвращаемый
sctp_getladdrs
.

9.9. Функция sctp_sendmsg

Приложение может управлять параметрами SCTP, используя функцию

sendmsg
со вспомогательными данными (см. главу 14). Однако из-за неудобств, связанных с применением вспомогательных данных, многие реализации SCTP предоставляют дополнительный библиотечный вызов (который на самом деле может быть и системным вызовом), упрощающий обращение к расширенным функциям SCTP. Вызов функции должен иметь следующий формат:

ssize_t sctp_sendmsg(int sockfd, const void * msg, size_t msgsz,

const struct sockaddr * to, socklen_t tolen, uint32_t ppid,

uint32_t flags, uint16_t stream, uint32_t timetolive,

uint32_t context);

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

Использование

sctp_sendmsg
значительно упрощает отправку параметров, но требует указания большего количества аргументов. В поле
sockfd
помещается дескриптор сокета, возвращенный системным вызовом socket. Аргумент
msg
указывает на буфер размера
msgsz
, содержимое которого должно быть передано собеседнику. В поле
tolen
помещается длина адреса, передаваемого через аргумент
to
. В поле
ppid
помещается идентификатор протокола, который будет передан вместе с порцией данных. Поле
flags
передается стеку SCTP. Разрешенные значения этого поля приводятся в табл. 7.5.

Номер потока SCTP указывается вызывающим приложением в аргументе

stream
. Процесс может указать время жизни сообщения в миллисекундах в поле
lifetime
. Значение 0 соответствует бесконечному времени жизни. Пользовательский контекст, при наличии такового, может быть указан в поле
context
. Пользовательский контекст связывает неудачную передачу сообщения (о которой получено уведомление) с локальным контекстом, имеющим отношение к приложению. Например, чтобы отправить сообщение в поток 1 с флагом отправки
MSG_PR_SCTP_TTL
, временем жизни равным 1000 мс, идентификатором протокола 24 и контекстом 52, процесс должен сделать следующий вызов:

Поделиться:
Популярные книги

Внешняя Зона

Жгулёв Пётр Николаевич
8. Real-Rpg
Фантастика:
фэнтези
попаданцы
рпг
5.00
рейтинг книги
Внешняя Зона

Князь

Мазин Александр Владимирович
3. Варяг
Фантастика:
альтернативная история
9.15
рейтинг книги
Князь

Путь Чести

Щукин Иван
3. Жизни Архимага
Фантастика:
фэнтези
боевая фантастика
6.43
рейтинг книги
Путь Чести

Идеальный мир для Лекаря 9

Сапфир Олег
9. Лекарь
Фантастика:
боевая фантастика
юмористическое фэнтези
6.00
рейтинг книги
Идеальный мир для Лекаря 9

Школа. Первый пояс

Игнатов Михаил Павлович
2. Путь
Фантастика:
фэнтези
7.67
рейтинг книги
Школа. Первый пояс

Наследник и новый Новосиб

Тарс Элиан
7. Десять Принцев Российской Империи
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Наследник и новый Новосиб

Бестужев. Служба Государевой Безопасности. Книга третья

Измайлов Сергей
3. Граф Бестужев
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Бестужев. Служба Государевой Безопасности. Книга третья

По дороге пряностей

Распопов Дмитрий Викторович
2. Венецианский купец
Фантастика:
фэнтези
героическая фантастика
альтернативная история
5.50
рейтинг книги
По дороге пряностей

Начальник милиции. Книга 3

Дамиров Рафаэль
3. Начальник милиции
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Начальник милиции. Книга 3

Убивать, чтобы жить

Бор Жорж
1. УЧЖ
Фантастика:
героическая фантастика
боевая фантастика
рпг
5.00
рейтинг книги
Убивать, чтобы жить

Измена. Осколки чувств

Верди Алиса
2. Измены
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Измена. Осколки чувств

Ведьма

Резник Юлия
Любовные романы:
современные любовные романы
эро литература
8.54
рейтинг книги
Ведьма

Темный Патриарх Светлого Рода 6

Лисицин Евгений
6. Темный Патриарх Светлого Рода
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Темный Патриарх Светлого Рода 6

Светлая ведьма для Темного ректора

Дари Адриана
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Светлая ведьма для Темного ректора