Переменная 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 |