#### 16.12.1 Socket Option Functions

Here are the functions for examining and modifying socket options. They are declared in `sys/socket.h`.

— Function: int getsockopt (int socket, int level, int optname, void *optval, socklen_t *optlen-ptr)

> Preliminary: | MT-Safe | AS-Safe | AC-Safe | See POSIX Safety Concepts.

> The `getsockopt` function gets information about the value of option optname at level level for socket socket.

> The option value is stored in a buffer that optval points to. Before the call, you should supply in `*`optlen-ptr the size of this buffer; on return, it contains the number of bytes of information actually stored in the buffer.

> Most options interpret the optval buffer as a single `int` value.

> The actual return value of `getsockopt` is `0` on success and `-1` on failure. The following `errno` error conditions are defined:

> `EBADF`
>   The socket argument is not a valid file descriptor.
> `ENOTSOCK`
>   The descriptor socket is not a socket.
> `ENOPROTOOPT`
>   The optname doesn't make sense for the given level.

— Function: int setsockopt (int socket, int level, int optname, const void *optval, socklen_t optlen)

> Preliminary: | MT-Safe | AS-Safe | AC-Safe | See POSIX Safety Concepts.

> This function is used to set the socket option optname at level level for socket socket. The value of the option is passed in the buffer optval of size optlen.