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 для включения параметра, и нулевого значения — для его выключения. Если в колонке «Флаг» не содержится символа «•», то параметр используется для передачи значения заданного типа между пользовательским процессом и системой.
В последующих разделах этой главы приводятся дополнительные подробности о параметрах сокетов.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКДанный текст является ознакомительным фрагментом.
Читайте также
Функции
Функции Существует мнемоническое правило: функции не должны по объему кода превышать двух экранов текста и иметь больше десяти локальных переменных. Каждая функция должна выполнять одно действие, но делать это хорошо. Не вредно разбить функцию на последовательность
16.5.1. Функции
16.5.1. Функции Интерфейс termios определяет несколько функций. Все они объявлены в <termios.h>. Четыре из них являются обслуживающими функциями для переносимого манипулирования структурой struct termios; остальные представляют собой системные вызовы. Функции, начинающиеся с cf,
Функции
Функции Функции в JScript, как и в других алгоритмических языках, позволяют объединить несколько операций под одним именем. В случае необходимости функция может быть вызвана из любого места сценария.В сценариях JScript поддерживаются два вида функций: встроенные функции и
Функции GMP
Функции GMP ПодразделыФункции Введение Функции этого вида позволяют работать с целыми числами повышенной точности определенного формата используя библиотеку GNU MP.Эта библиотека не входит в стандартный пакет PHP. Загрузить коды библиотеки и документацию по ней можно на
5.8.7 Функции
5.8.7 Функции СинтаксисОболочка bash позволяет пользователю создавать собственные функции. Функции ведут себя и используются точно так же, как обычные команды оболочки, т. е. мы можем сами создавать новые команды. Функции конструируются следующим образом: function name () {list}Причем
19.7.8. Функции
19.7.8. Функции Описание функции выглядит так: имя() { список; }Пример:cdir(){ # изменяем каталог cd / }При выполнении функция не создает нового процесса, а выполняется в среде процесса, содержащего эту функцию. Аргументы функции можно передать ей как обыкновенные параметры при
10.16 Функции TCP
10.16 Функции TCP Данная глава посвящена многочисленным функциям TCP. Ниже перечислены основные из них:? Связывание портов с соединениями? Инициализация соединений посредством трехшагового подтверждения? Выполнение медленного старта, исключающего перегрузку
8.6. Функции
8.6. Функции Оператор определения функции имеет следующий синтаксис:[function] имя() { список}Определять функцию можно в любом месте сценария, но вызов ее должен осуществляться строго после описания. Вызывается функция подобно любой команде — по имени. Переданные ей аргументы
3.1. Функции
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; функция
4.5.3. Функции, которые создают новые конфигурации из существующих 4.5.3.1. Функции геометрии, которые производят новые конфигурации
4.5.3. Функции, которые создают новые конфигурации из существующих 4.5.3.1. Функции геометрии, которые производят новые конфигурации Раздел "4.5.2. Функции Geometry" обсуждает несколько функций, которые создают новые конфигурации из
Функции
Функции Excel – серьезная программа для вычислений, одним из главных достоинств которой является множество встроенных функций. Это обширная тема, достойная если не книги, то главы в многотомном руководстве. Рассмотрим ее кратко – ровно настолько, чтобы вы могли далее
Функции
Функции AddAtom Функция AddAtom добавляет строку символов в таблицу локальных атомов и возвращает уникальное значение (атом), идентифицирующее строку. ATOM AddAtom ( LPCTSTR lpString // указатель на добавляемую строку ); Параметры lpString - указатель на добавляемую строку, завершающуюся нулем.
1.5 Функции
1.5 Функции Функция – это именованная часть программы, к которой можно обращаться из других частей программы столько раз, сколько потребуется. Рассмотрим программу, печатающую степени числа 2:extern float pow(float, int); //pow() определена в другом местеmain() (* for (int i=0; i«10; i++) cout „« pow(2,i) ««