UNIX: разработка сетевых приложений
Часть 93 из 399 Информация о книге
struct sctp_status {sctp_assoc_t sstat_assoc_id;int32_t sstat_state;u_int32_t sstat_rwnd;u_int16_t sstat_unackdata;u_int16_t sstat_penddata;u_int16_t sstat_instrms;u_int16_t sstat_outstrms;u_int32_t sstat_fragmentation_point;struct sctp_paddrinfo sstat_primary;};Поля структуры имеют следующий смысл:
■
содержит идентификатор ассоциации;sstat_assoc_id■
содержит константу, обозначающую состояние ассоциации (табл. 7.8). Подробное описание состояний конечной точки SCTP, чередующихся при установке и завершении ассоциации, приводится на рис. 2.8;sstat_state■
содержит текущее вычисленное значение приемного окна собеседника;sstat_rwnd■
содержит количество неподтвержденных порций данных, ждущих ответа собеседника;sstat_unackdata■
содержит количество непрочитанных порций данных, подготовленных локальной конечной точкой SCTP для приложения;sstat_penddata■
содержит количество потоков, используемых собеседником для передачи данных на данную конечную точку;sstat_instrms■
содержит количество потоков, по которым данная конечная точка может передавать данные собеседнику;sstat_outstrms■
содержит текущее значение границы фрагментации пользовательских сообщений, используемое локальной конечной точкой SCTP. Это значение обычно равняется минимальной MTU для всех адресатов или еще меньшей величине, установленной при помощи параметраsstat_fragmentation_point;SCTP_MAXSEG■
содержит текущий основной адрес. Основной адрес используется по умолчанию для отправки данных собеседнику.sstat_primaryТаблица 7.8. Состояния SCTP
Константа Описание SCTP_CLOSED Ассоциация закрыта SCTP_COOKIE_WAIT Ассоциация отправила пакет INIT SCTP_COOKIE_ECHOED Ассоциация отправила эхо-ответ cookie SCTP_ESTABLISHED Ассоциация установлена SCTP_SHUTDOWN_PENDING Ассоциация ждет отправки сообщения о завершении SCTP_SHUTDOWN_SENT Ассоциация отправила сообщение о завершении SCTP_SHUTDOWN_RECEIVED Ассоциация получила сообщение о завершении SCTP_SHUTDOWN_ACK_SENT Ассоциация ждет пакета SHUTDOWN-COMPLETE Эти параметры полезны для диагностики соединения и определения характеристик текущего сеанса. Например, функция
в разделе 10.2 будет считыватьsctp_get_no_strmsдля определения количества доступных для отправки данных потоков. Низкое значениеsstat_outstrmsили высокое значениеsstat_rwndпозволяет сделать вывод о заполнении приемного буфера собеседника, так что приложение может вовремя замедлить передачу данных. Полеsstat_unackdataможет использоваться некоторыми приложениями для уменьшения количества пакетов, создаваемых SCTP, путем уменьшения размеров сообщений.sstat_fragmentation_point7.11. Функция fcntl
Сокращение
означает «управление файлами» (file control). Эта функция выполняет различные операции управления дескрипторами. Перед описанием этой функции и ее влияния на сокет нам нужно составить некоторое более общее представление о ее возможностях. В табл. 7.9 приводятся различные операции, выполняемые функциямиfcntlиfcntlи маршрутизирующими сокетами.ioctlТаблица 7.9. Операции функций fcntl и ioctl и маршрутизирующих сокетов
Операция fcntl ioctl Маршрутизирующий сокет Posix.1g Установка сокета для неблокируемого ввода-вывода F_SETFL, O_NONBLOCK FIONBIO fcntl Установка сокета для ввода-вывода, управляемого сигналом F_SETFL, O_ASYNC FIOASYNC fcntl Установка владельца сокета F_SETOWN SIOCSPGRP или FIOSETOWN fcntl Получение владельца сокета F_GETOWN SIOCGPGRP или FIOGETOWN fcntl Получение текущего количества байтов в приемном буфере сокета FIONREAD Проверка, находится ли процесс на отметке внеполосных данных SIOCATMARK sockatmark Получение списка интерфейсов SIOCGIFCONF Sysctl Операции интерфейсов SIOC[GS]IFxxx Кэш-операции ARP SIOCxARP RTM_xxx Операции таблицы маршрутизации SIOGxxxRT RTM_xxx