getsockopt

GETSOCKOPT(2)            Руководство программиста Linux            GETSOCKOPT(2)



ИМЯ
       getsockopt, setsockopt - получить или установить флаги сокета

ОБЗОР
       #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).

ДЕФЕКТЫ
       Некоторые параметры сокетов должны обрабатываться на более низких уровнях
       системы.

СМОТРИТЕ ТАКЖЕ
       ioctl(2), socket(2), getprotoent(3), protocols(5), ip(7), packet(7),
       socket(7), tcp(7), udp(7), unix(7)



Linux                              2016-03-15                      GETSOCKOPT(2)