# getsockopt

## NAME



           getsockopt, setsockopt - get and set options on sockets
    


## LIBRARY



           Standard C library (_libc_ , _-lc_)
    


## SYNOPSIS



           **#include <sys/socket.h>**
    
           **int getsockopt(** socklen *restrict optlen;
                          **int** _sockfd_**, int** _level_**, int** _optname_**,**
                          **void** _optval_**[_Nullable restrict ***_optlen_**],**
                          **socklen_t *restrict** _optlen_**);**
           **int setsockopt(** socklen_t optlen;
                          **int** _sockfd_**, int** _level_**, int** _optname_**,**
                          **const void** _optval_**[**_optlen_**],**
                          **socklen_t** _optlen_**);**
    


## DESCRIPTION



           **getsockopt**() and **setsockopt**() manipulate options for the socket
           referred to by the file descriptor _sockfd_.  Options may exist at
           multiple protocol levels; they are always present at the uppermost
           socket level.
    
           When manipulating socket options, the level at which the option
           resides and the name of the option must be specified.  To
           manipulate options at the sockets API level, _level_ is specified as
           **SOL_SOCKET**.  To manipulate options at any other level the protocol
           number of the appropriate protocol controlling the option is
           supplied.  For example, to indicate that an option is to be
           interpreted by the **TCP** protocol, _level_ should be set to the
           protocol number of **TCP** ; see getprotoent(3).
    
           The arguments _optval_ and _optlen_ are used to access option values
           for **setsockopt**().  For **getsockopt**() they identify a buffer in
           which the value for the requested option(s) are to be returned.
           For **getsockopt**(), _optlen_ is a value-result argument, initially
           containing the size of the buffer pointed to by _optval_ , and
           modified on return to indicate the actual size of the value
           returned.  If no option value is to be supplied or returned,
           _optval_ may be NULL.
    
           _Optname_ and any specified options are passed uninterpreted to the
           appropriate protocol module for interpretation.  The include file
           _< sys/socket.h>_ contains definitions for socket level options,
           described below.  Options at other protocol levels vary in format
           and name; consult the appropriate entries in section 4 of the
           manual.
    
           Most socket-level options utilize an _int_ argument for _optval_.  For
           **setsockopt**(), the argument should be nonzero to enable a boolean
           option, or zero if the option is to be disabled.
    
           For a description of the available socket options see socket(7)
           and the appropriate protocol man pages.
    


## RETURN VALUE



           On success, zero is returned for the standard options.  On error,
           -1 is returned, and _errno_ is set to indicate the error.
    
           Netfilter allows the programmer to define custom socket options
           with associated handlers; for such options, the return value on
           success is the value returned by the handler.
    


## ERRORS



           **EBADF** The argument _sockfd_ is not a valid file descriptor.
    
           **EFAULT** The address pointed to by _optval_ is not in a valid part of
                  the process address space.  For **getsockopt**(), this error
                  may also be returned if _optlen_ is not in a valid part of
                  the process address space.
    
           **EINVAL** _optlen_ invalid in **setsockopt**().  In some cases this error
                  can also occur for an invalid value in _optval_ (e.g., for
                  the **IP_ADD_MEMBERSHIP** option described in ip(7)).
    
           **ENOPROTOOPT**
                  The option is unknown at the level indicated.
    
           **ENOTSOCK**
                  The file descriptor _sockfd_ does not refer to a socket.
    


## STANDARDS



           POSIX.1-2008.
    


## BUGS



           Several of the socket options should be handled at lower levels of
           the system.
    


* * *