Однако функции getsockopt() и setsockopt() иногда применяются для корректировки опций протоколов TCP или UDP, и в этом случае в качестве второго параметра должен быть указан номер протокола, возвращенный функцией getprotobyname().
Третий параметр, $option_name,— целочисленное значение, выбранное из обширного списка возможных констант. Последний, четвертый параметр, $option_value, представляет собой допустимое значение, которое должно быть присвоено опции; при получении недопустимого значения функция возвращает undef. При успешном выполнении функция getsockopt() возвращает значение, затребованное опцией, а в ином случае - undef. В случае успешного выполнения, если опция была успешно установлена, функция setsockopt() возвращает истинное значение, в ином случае - undef .
Значение опции часто представляет собой логический флажок, который указывает, должна ли быть опция включена или выключена. В данном случае для установки или определения значения этой опции не требуется специальный код. Например, ниже показано, как установить истинное значение опции SO_BROADCAST (широковещательная рассылка).
setsockopt(SOCK,SO_SOCKET, SO_BROADCAST, 1);
Далее показано, как выбрать текущее значение этого флажка,
my $reuse = getsockopt(SOCK,SO_SOCKET,SO_BROADCAST);
Однако для некоторых опций применяются целые числа или более сложные типы данных, такие как структуры timeval языка С. В этом случае необходимо упаковывать значения в двоичную форму перед передачей функции setsосkopt() и распаковывать их после вызова функции getsockopt(). Ниже показано, как распаковать значение максимального размера буфера, применяемого в сокете для хранения исходящих данных. Опция SO_SNDBUF представлена в виде упакованного целого числа (формат Т).