Функция
sctp_connectx
используется для соединения с многоинтерфейсным узлом. При ее вызове мы должны указать адреса собеседника в параметре
addrs
(количество адресов определяется параметром
addrcnt
). Формат структуры
addrs
представлен на рис. 9.3. Стек SCTP устанавливает ассоциацию, используя один или несколько адресов из переданного списка. Все адреса
addrs
считаются действующими и подтвержденными.9.5. Функция sctp_getpaddrs
Функция
getpeername
не предназначена для использования протоколом, рассчитанным на работу с многоинтерфейсными узлами. Для сокетов SCTP она способна вернуть лишь основной адрес собеседника. Если нужны все адреса, следует вызывать функцию
sctp_getpaddrs
.#include
int sctp_getpaddrs(int
Аргумент
sockfd
представляет собой дескриптор сокета, возвращаемый функцией
socket
. Второй аргумент задает идентификатор ассоциации для сокетов типа «один-ко-многим». Для сокетов типа «один-к-одному» этот аргумент игнорируется.
addrs
— адрес указателя, который функция
sctp_getpaddrs
заполнит упакованным списком адресов, выделив под него локальный буфер (см. рис. 9.3 и листинг 23.12). Для освобождения буфера, созданного
sctp_getpaddrs
, следует использовать вызов
sctp_freepaddrs
.9.6. Функция sctp_freepaddrs
Функция
sctp_freepaddrs
освобождает ресурсы, выделенные вызовом
sctp_getpaddrs
.#include
void sctp_freepaddrs(struct sockaddr *
Здесь аргумент
addrs
— указатель на массив адресов, возвращаемый
sctp_getpaddrs
.9.7. Функция sctp_getladdrs
Функция
sctp_getladdrs
может использоваться для получения списка локальных адресов, относящихся к определенной ассоциации. Эта функция бывает необходима в тех случаях, когда приложению требуется узнать, какие именно локальные адреса оно использует (набор адресов, напомним, может быть произвольным подмножеством всех адресов системы).#include
int sctp_getladdrs(int
Здесь
sockfd
— дескриптор сокета, возвращаемый функцией
socket
. Аргумент
id
— идентификатор ассоциации для сокетов типа «один-ко-многим». Поле
id
игнорируется для сокетов типа «один-к-одному». Параметр представляет собой адрес указателя на буфер, выделяемый и заполняемый функцией
sctp_getladdrs
. В этот буфер помещается упакованный список адресов. Структура списка представлена на рис. 9.3 и в листинге 23.12. Для освобождения буфера процесс должен вызвать функцию
sctp_freeladdrs
.9.8. Функция sctp_freeladdrs
Функция
sctp_freeladdrs
освобождает ресурсы, выделенные при вызове
sctp_getladdrs
.#include
void sctp_freeladdrs(struct sockaddr *
Здесь
addrs
указывает на список адресов, возвращаемый
sctp_getladdrs
.9.9. Функция sctp_sendmsg
Приложение может управлять параметрами SCTP, используя функцию
sendmsg
со вспомогательными данными (см. главу 14). Однако из-за неудобств, связанных с применением вспомогательных данных, многие реализации SCTP предоставляют дополнительный библиотечный вызов (который на самом деле может быть и системным вызовом), упрощающий обращение к расширенным функциям SCTP. Вызов функции должен иметь следующий формат:ssize_t sctp_sendmsg(int
const struct sockaddr *
uint32_t
uint32_t