Для чего используется SOL_SOCKET?

Как говорится в Linux man страницы

Используйте эту константу в качестве аргумента уровня для getsockopt или setsockopt для управления параметрами уровня сокета, описанными в этом разделе

Но я не понимаю этого объяснения. Какова цель SOL_SOCKET? Что оно делает?

Ответы

Ответ 1

SOL_SOCKET - это сам слой сокета. Он используется для опций, которые не зависят от протокола.

Вы можете прочитать больше здесь.

Ответ 2

При получении опции сокета или ее настройке вы указываете имя опции, а также уровень. Когда уровень = SOL_SOCKET, элемент будет искать в самом сокете.

Например, предположим, что мы хотим установить опцию сокета для повторного использования адреса в 1 (on/true), мы передаем SOL_SOCKET "level" и значение, которое мы хотим установить.

int value = 1;    
setsockopt(mysocket, SOL_SOCKET, SO_REUSEADDR, &value, sizeof(value));

Это установит SO_REUSEADDR в моем сокете в 1.

Я сам застрял на этом, документация крайне загадочная. Чуть более подробная документация здесь: http://pubs.opengroup.org/onlinepubs/7908799/xns/getsockopt.html