7.2. Функции getsockopt и setsockopt

7.2. Функции getsockopt и setsockopt

Эти две функции применяются только к сокетам.

#include <sys/socket.h>

int getsockopt(int sockfd, int level, int optname, void *optval, socklen_t *optlen);

int setsockopt(int sockfd, int level, int optname, const void *optval, socklen_t optlen);

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

Переменная sockfd должна ссылаться на открытый дескриптор сокета. Переменная level определяет, каким кодом должен интерпретироваться параметр: общими программами обработки сокетов или зависящими от протокола программами (например, IPv4, IPv6, TCP или SCTP).

optval — это указатель на переменную, из которой извлекается новое значение параметра с помощью функции setsockopt или в которой сохраняется текущее значение параметра с помощью функции getsockopt. Размер этой переменной задается последним аргументом. Для функции setsockopt тип этого аргумента — значение, а для функции getsockopt — «значение-результат».

В табл. 7.1 и 7.2 сведены параметры, которые могут запрашиваться функцией getsockopt или устанавливаться функцией setsockopt. В колонке «Тип данных» приводится тип данных того, на что указывает указатель optval для каждого параметра. Две фигурные скобки мы используем, чтобы обозначить структуру, например linger{} обозначает struct linger.

Таблица 7.1. Параметры сокетов для функций getsockopt и setsockopt

level optname get set Описание Флаг Тип данных
SOL_SOCKET SO_BROADCAST Позволяет посылать широковещательные дейтаграммы int
SO_DEBUG Разрешает отладку int
SO_DONTROUTE Обходит таблицу маршрутизации int
SO_ERROR Получает ошибку, ожидающую обработки, и возвращает значение параметра в исходное состояние int
SO_KEEPALIVE Периодически проверяет, находится ли соединение в рабочем состоянии int
SO_LINGER Задерживает закрытие сокета, если имеются данные для отправки linger{}
SO_OOBINLINE Оставляет полученные внеполосные данные вместе с обычными данными (inline) int
SO_RCVBUF Размер приемного буфера int
SO_SNDBUF Размер буфера отправки int
SO_RCVLOWAT Минимальное количество данных для приемного буфера сокета int
SO_SNDLOWAT Минимальное количество данных для буфера отправки сокета int
SO_RCVTIMEO Тайм-аут при получении timeval{}
SO_SNDTIMEO Тайм-аут при отправке timeval{}
SO_REUSEADDR Допускает повторное использование локального адреса int
SO_REUSEPORT Допускает повторное использование локального адреса int
SO_TYPE Возвращает тип сокета int
SO_USELOOPBACK Маршрутизирующий сокет получает копию того, что он отправляет int
IPPROTO_IP IP_HDRINCL Включается IP- заголовок int
IP_OPTIONS В заголовке IPv4 устанавливаются параметры IP см. текст
IP_RECVDSTADDR Возвращает IP-адрес получателя int
IP_RECVIF Возвращает индекс интерфейса, на котором принимается дейтаграмма UDP int
IP_TOS Тип сервиса и приоритет int
IP_TTL Время жизни int
IP_MULTICAST_IF Задает интерфейс для исходящих дейтаграмм in_addr{}
IP_MULTICAST_TTL Задает TTL для исходящих дейтаграмм u_char
IP_MULTICAST_LOOP Разрешает или отменяет отправку копии дейтаграммы на тот узел, откуда она была послана (loopback) u_char
IP_ADD_MEMBERSHIP Включение в группу многоадресной передачи ip_mreq{}
IP_DROP_MEMBERSHIP Отключение от группы многоадресной передачи ip_mreq{}
IP_{BLOCK, UNBLOCK}_SOURCE Блокирование и разблокирование источника многоадресной передачи ip_mreq_source{}
IP_{ADD, DROP}_SOURCE_MEMBERSHIP Присоединение или отключение от многоадресной передачи от источника (source-specific) ip_mreq_source{}
IPPROTO_ICMPV6 ICMP6_FILTER Указывает тип сообщения ICMPv6, которое передается процессу icmp6_filter{}
IPPROTO_IPV6 IPV6_ADDRFORM Меняет формат адреса сокета int
IPV6_CHECKSUM Отступ поля контрольной суммы для символьных (неструктурированных) сокетов int
IPV6_DONTFRAG Не фрагментировать, а сбрасывать большие пакеты int
IPV6_NEXTHOP Задает следующий транзитный адрес sockaddr{}
IPV6_PATHMTU Получение текущей маршрутной МТУ ip6_mtuinfo{}
IPV6_RECVDSTOPTS Получение параметров адресата int
IPV6_RECVHOPLIMIT Получение ограничения на количество транзитных узлов при направленной передаче int
IPV6_RECVHOPOPTS Получение параметров прыжков int
IPV6_RECVPATHMTU Получение маршрутной MTU int
IPV6_RECVPKTINFO Получение информации о пакетах int
IPV6_RECVRTHDR Получение маршрута от источника int
IPV6_RECVTCLASS Получение класса трафика int
IPV6_UNICAST_HOPS Предел количества транзитных узлов, задаваемый по умолчанию int
IPV6_USE_MIN_MTU Использовать минимальную MTU int
IPV6_V60NLY Отключить совместимость с IPv4 int
IPV6_XXX Вспомогательные данные см. текст
IPV6_MULTICAST_IF Задает интерфейс для исходящих дейтаграмм u_int
IPV6_MULTICAST_HOPS Задает предельное количество транзитных узлов для исходящих широковещательных сообщений int
IPV6_MULTICAST_LOOP Разрешает или отменяет отправку копии дейтаграммы на тот узел, откуда она была послана (loopback) u_int
IPV6_LEAVE_GROUP Выход из группы многоадресной передачи ipv6_mreq{}
IPPROTO_IP или IPPROTO_IPV6 MCAST_JOIN_GROUP Присоединение к группе многоадресной передачи group_req{}
MCAST_LEAVE_GROUP Выход из группы многоадресной передачи group_source_req{}
MCAST_BLOCK_SOURCE Блокирование источника многоадресной передачи group_source_req{}
MCAST_UNBLOCK_SOURCE Разблокирование источника многоадресной передачи group_source_req{}
MCAST_JOIN_SOURCE_GROUP Присоединение к группе многоадресной передачи от источника group_source_req{}
MCAST_LEAVE_SOURCE_GROUP Выход из группы многоадресной передачи от источника group_source_req{}

Таблица 7.2. Параметры сокетов транспортного уровня

Level optname get set Описание Флаг Тип данных
IPPROTO_TCP TCP_MAXSEG Максимальный размер сегмента TCP int
TCP_NODELAY Отключает алгоритм Нагла int
IPPROTO_SCTP SCTP_ADAPTION_LAYER Указание на уровень адаптации sctp_setadaption
SCTP_ASSOCINFO + Получение и задание сведений об ассоциации sctp_assocparamms{}
SCTP_AUTOCLOSE Автоматическое закрытие int
SCTP_DEFAULT_SEND_PARAM Параметры отправки но умолчанию sctp_sndrcvinfo{}
SCTP_DISABLE_FRAGMENTS Фрагментация SCTP int
SCTP_EVENTS Уведомление об интересующих событиях sctp_event_subscribe{}
SCTP_GET_PEER_ADDR_INFO + Получение состояния адреса собеседника sctp_paddrinfo{}
SCTP_I_WANT_MAPPED_V4_ADDR Отображение адресов IPv4 int
SCTP_INITMSG Параметры пакета INIT по умолчанию sctp_initmsg{}
SCTP_MAXBURST Максимальный размер набора пакетов int
SCTP_MAXSEG Максимальный размер фрагментации int
SCTP_NODELAY Отключение алгоритма Нагла int
SCTP_PEER_ADDR_PARAMS + Параметры адреса собеседника sctp_paddrparams{)
SCTP_PRIMARY_ADDR + Основной адрес назначения sctp_setprim{}
SCTP_RTOINFO + Информация RTO sctp_rtoinfo{}
SCTP_SET_PEER_PRIMARY_ADDR Основной адрес назначения собеседника sctp_setpeerprim{}
SCTP_STATUS + Получение сведений о статусе ассоциации sctp_status{}

Существует два основных типа параметров: двоичные параметры, включающие или отключающие определенное свойство (флаги), и параметры, получающие и возвращающие значения параметров, которые мы можем либо задавать, либо проверять. В колонке «Флаг» указывается, относится ли параметр к флагам. Для флагов при вызове функции getsockopt аргумент *optval является целым числом. Возвращаемое значение *optval нулевое, если параметр отключен, и ненулевое, если параметр включен. Аналогично, функция setsockopt требует ненулевого значения *optval для включения параметра, и нулевого значения — для его выключения. Если в колонке «Флаг» не содержится символа «•», то параметр используется для передачи значения заданного типа между пользовательским процессом и системой.

В последующих разделах этой главы приводятся дополнительные подробности о параметрах сокетов.

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

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

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

1.5 Функции

Из книги C++ автора Хилл Мюррей

1.5 Функции Функция – это именованная часть программы, к которой можно обращаться из других частей программы столько раз, сколько потребуется. Рассмотрим программу, печатающую степени числа 2:extern float pow(float, int); //pow() определена в другом местеmain() (* for (int i=0; i«10; i++) cout „« pow(2,i) ««


5.8.7 Функции

Из книги Linux для пользователя автора Костромин Виктор Алексеевич

5.8.7 Функции СинтаксисОболочка bash позволяет пользователю создавать собственные функции. Функции ведут себя и используются точно так же, как обычные команды оболочки, т. е. мы можем сами создавать новые команды. Функции конструируются следующим образом: function name () {list}Причем


Функции

Из книги Эффективное делопроизводство автора Пташинский Владимир Сергеевич

Функции Excel – серьезная программа для вычислений, одним из главных достоинств которой является множество встроенных функций. Это обширная тема, достойная если не книги, то главы в многотомном руководстве. Рассмотрим ее кратко – ровно настолько, чтобы вы могли далее


19.7.8. Функции

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

19.7.8. Функции Описание функции выглядит так: имя() { список; }Пример:cdir(){ # изменяем каталог cd / }При выполнении функция не создает нового процесса, а выполняется в среде процесса, содержащего эту функцию. Аргументы функции можно передать ей как обыкновенные параметры при


6.12. Функции

Из книги Феномен науки. Кибернетический подход к эволюции автора Турчин Валентин Фёдорович


Функции

Из книги Windows Script Host для Windows 2000/XP автора Попов Андрей Владимирович

Функции Функции в JScript, как и в других алгоритмических языках, позволяют объединить несколько операций под одним именем. В случае необходимости функция может быть вызвана из любого места сценария.В сценариях JScript поддерживаются два вида функций: встроенные функции и


4.5.3. Функции, которые создают новые конфигурации из существующих 4.5.3.1. Функции геометрии, которые производят новые конфигурации

Из книги MySQL: руководство профессионала автора Паутов Алексей В

4.5.3. Функции, которые создают новые конфигурации из существующих 4.5.3.1. Функции геометрии, которые производят новые конфигурации Раздел "4.5.2. Функции Geometry" обсуждает несколько функций, которые создают новые конфигурации из


10.16 Функции TCP

Из книги TCP/IP Архитектура, протоколы, реализация (включая IP версии 6 и IP Security) автора Фейт Сидни М

10.16 Функции TCP Данная глава посвящена многочисленным функциям TCP. Ниже перечислены основные из них:? Связывание портов с соединениями? Инициализация соединений посредством трехшагового подтверждения? Выполнение медленного старта, исключающего перегрузку


Функции GMP

Из книги Справочник по PHP автора

Функции GMP ПодразделыФункции Введение Функции этого вида позволяют работать с целыми числами повышенной точности определенного формата используя библиотеку GNU MP.Эта библиотека не входит в стандартный пакет PHP. Загрузить коды библиотеки и документацию по ней можно на


16.5.1. Функции

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

16.5.1. Функции Интерфейс termios определяет несколько функций. Все они объявлены в <termios.h>. Четыре из них являются обслуживающими функциями для переносимого манипулирования структурой struct termios; остальные представляют собой системные вызовы. Функции, начинающиеся с cf,


8.6. Функции

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

8.6. Функции Оператор определения функции имеет следующий синтаксис:[function] имя() { список}Определять функцию можно в любом месте сценария, но вызов ее должен осуществляться строго после описания. Вызывается функция подобно любой команде — по имени. Переданные ей аргументы


Функции

Из книги Русский справочник по Win32 API автора Сорока Тарас

Функции AddAtom Функция AddAtom добавляет строку символов в таблицу локальных атомов и возвращает уникальное значение (атом), идентифицирующее строку. ATOM AddAtom ( LPCTSTR lpString // указатель на добавляемую строку ); Параметры lpString - указатель на добавляемую строку, завершающуюся нулем.


Функции

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

Функции Существует мнемоническое правило: функции не должны по объему кода превышать двух экранов текста и иметь больше десяти локальных переменных. Каждая функция должна выполнять одно действие, но делать это хорошо. Не вредно разбить функцию на последовательность


3.1. Функции

Из книги Конец холивара. Pascal vs C автора Кривцов М. А.

3.1. Функции Пример 1.7: Функция вычисляющая факториал.VAR A, Y : INTEGER;FUNCTION FAKTORIAL (N : INTEGER) : INTEGER; VAR F, K : INTEGER; BEGIN F := 1; FOR K := 1 TO N DO F := F * K; FAKTORIAL := F END; BEGINWRITELN (‘ВВЕДИТЕ ЦЕЛОЕ ПОЛОЖИТЕЛЬНОЕ ЧИСЛО’);READLN (A);Y := FAKTORIAL (A);WRITELN (‘N!=’, Y);READLN;READLNEND.Обратите внимание на то, что в описании функции


3. Функции

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

3. Функции В C есть только функции, а процедур нет.Тело функции не может содержать в себе определения других функций.Функцию можно вызвать из другой функции.Оператор return возвращает выполнение программы в точку вызова функции.При использовании return; функция