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