Выбрать главу

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