setsockopt - получить или установить флаги сокета
setsockopt(2)
получить или установить флаги сокета
Other Alias
getsockopt
ОБЗОР
#include <sys/types.h> /* Смотрите
ЗАМЕЧАНИЯ */
#include <sys/socket.h>
int getsockopt(int sockfd, int level, int optname, void *optval, socklen_t *optlen);int setsockopt(int sockfd, int level, int optname, const void *optval, socklen_t optlen);
ОПИСАНИЕ
getsockopt() и
setsockopt() управляют параметрами сокета, на который
указывает файловый дескриптор
sockfd. Параметры могут быть из различных
уровней протоколов; они всегда присутствуют на самом верхнем уровне сокета.
При работе с параметрами сокета должен быть указан уровень, на котором
находится этот параметр и его имя. Для работы с параметрами на уровне API
сокета в level указывается значение SOL_SOCKET. Для работы с
параметрами на любом другом уровне, этим вызовам передаётся номер
соответствующего протокола, который они контролируют. Например, для
указания, что параметр должен интерпретироваться протоколом TCP, в
level нужно указать номер протокола TCP; смотрите getprotoent(3).
Аргументы optval и optlen используются в setsockopt() для доступа к
значениям параметров. Для getsockopt() они задают буфер, в который нужно
поместить запрошенное значение параметра при возврате. У getsockopt() в
аргументе optlen изначально содержится размер буфера, на который
указывает optval, а при завершении в нём содержится реальный размер
возвращаемого значения. Если значение параметра не указывается или
возвращается, то optval может быть NULL.
Аргумент optname и все указанные параметры без изменений передаются для
интерпретации соответствующему модулю протоколов. Файл
<sys/socket.h> содержит определения параметров уровня сокета; их
описание дано ниже. Параметры на других уровнях протоколов различаются по
формату и по имени. Обращайтесь к соответствующим файлам раздела 4
справочных страниц.
Большинство параметров уровня сокета используют тип int для аргумента
optval. Чтобы установить параметр логического типа аргумент
setsockopt() должен быть ненулевым, и ноль, если нужно отключить этот
параметр.
Описание доступных параметров сокетов находится в socket(7) и
соответствующих протоколам справочных страницах.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
При успешном выполнении при стандартных параметрах возвращается 0. В случае
ошибки возвращается -1, а
errno устанавливается в соответствующее
значение.
Netfilter позволяет программисту определять собственные параметры сокетов со
привязанными обработчиками; для таких параметров при успешном выполнении
возвращается значение, полученное от обработчика.
ОШИБКИ
EBADF
Аргумент sockfd не является допустимым файловым дескриптором.
EFAULT
Адрес, на который указывает optval, не находится в разрешённой части
адресного пространства процесса. Для getsockopt() эта ошибка может также
появиться, если optlen выходит за пределы адресного пространства
процесса.
EINVAL
Неправильное значение optlen в setsockopt(). В некоторых случаях эта
ошибка может возникать из-за неправильного значения в optval (например,
для параметра IP_ADD_MEMBERSHIP, описанного в ip(7)).
ENOPROTOOPT
Неизвестный параметр для указанного уровня.
ENOTSOCK
Файловый дескриптор sockfd указывает не на каталог.
СООТВЕТСТВИЕ СТАНДАРТАМ
POSIX.1-2001, POSIX.1-2008, SVr4, 4.4BSD (данные системные вызовы впервые
появились в 4.2BSD).
ЗАМЕЧАНИЯ
В POSIX.1 не требуется включение
<sys/types.h>, и этот
заголовочный файл не требуется в Linux. Однако, для некоторых старых
реализаций (BSD) требует данный файл, и в переносимых приложениях для
предосторожности, вероятно, лучше его указать.
Аргумент optlen в getsockopt() и setsockopt() в действительности
имеет тип int [*] (это именно так в 4.x BSD, libc4 и libc5). При
разработке стандарта POSIX случилось некоторое недопонимание и появился тип
socklen_t, также используемый в glibc. Смотрите также accept(2).
ДЕФЕКТЫ
Некоторые параметры сокетов должны обрабатываться на более низких уровнях
системы.