8. Перепишите код, показанный в листинге 6.5, чтобы вызывать функцию
sysconf
для определения максимального числа дескрипторов и размещения соответствующего массива
client
в памяти.
Глава 7
Параметры сокетов
7.1. Введение
Существуют различные способы получения и установки параметров сокетов:
функции
getsockopt
и
setsockopt
;
функция
fcntl
;
функция
ioctl
.
Эту главу мы начнем с описания функций
getsockopt
и
setsockopt
. Далее мы приведем пример, в котором выводятся заданные по умолчанию значения параметров, а затем дадим подробное описание всех параметров сокетов. Мы разделили описание параметров на следующие категории: общие, IPv4, IPv6, TCP и SCTP. При первом прочтении главы можно пропустить подробное описание параметров и при необходимости прочесть отдельные разделы, на которые даны ссылки. Отдельные параметры подробно описываются в дальнейших главах, например параметры многоадресной передачи IPv4 и IPv6 мы обсуждаем в разделе 19.5.
Мы также рассмотрим функцию
fcntl
, поскольку она реализует предусмотренные стандартом POSIX возможности отключить для сокета блокировку ввода-вывода, включить управление сигналами, а также установить владельца сокета. Функцию
ioctl
мы опишем в главе 17.
7.2. Функции getsockopt и setsockopt
Эти две функции применяются только к сокетам.
#include
int getsockopt(int
int setsockopt(int
Переменная
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