#### 16.12.2 Socket-Level Options ¶

Constant: `int` SOL_SOCKET ¶

  Use this constant as the level argument to `getsockopt` or `setsockopt` to manipulate the socket-level options described in this section.

Here is a table of socket-level option names; all are defined in the header file `sys/socket.h`.

`SO_DEBUG` ¶

  This option toggles recording of debugging information in the underlying protocol modules. The value has type `int`; a nonzero value means “yes”.

`SO_REUSEADDR` ¶

  This option controls whether `bind` (see Setting the Address of a Socket) should permit reuse of local addresses for this socket. If you enable this option, you can actually have two sockets with the same Internet port number; but the system won’t allow you to use the two identically-named sockets in a way that would confuse the Internet. The reason for this option is that some higher-level Internet protocols, including FTP, require you to keep reusing the same port number.

  The value has type `int`; a nonzero value means “yes”.

`SO_KEEPALIVE` ¶

  This option controls whether the underlying protocol should periodically transmit messages on a connected socket. If the peer fails to respond to these messages, the connection is considered broken. The value has type `int`; a nonzero value means “yes”.

`SO_DONTROUTE` ¶

  This option controls whether outgoing messages bypass the normal message routing facilities. If set, messages are sent directly to the network interface instead. The value has type `int`; a nonzero value means “yes”.

`SO_LINGER` ¶

  This option specifies what should happen when the socket of a type that promises reliable delivery still has untransmitted messages when it is closed; see Closing a Socket. The value has type `struct linger`.

  Data Type: struct linger ¶

    This structure type has the following members:

    `int l_onoff`

      This field is interpreted as a boolean. If nonzero, `close` blocks until the data are transmitted or the timeout period has expired.

    `int l_linger`

      This specifies the timeout period, in seconds.

`SO_BROADCAST` ¶

  This option controls whether datagrams may be broadcast from the socket. The value has type `int`; a nonzero value means “yes”.

`SO_OOBINLINE` ¶

  If this option is set, out-of-band data received on the socket is placed in the normal input queue. This permits it to be read using `read` or `recv` without specifying the `MSG_OOB` flag. See Out-of-Band Data. The value has type `int`; a nonzero value means “yes”.

`SO_SNDBUF` ¶

  This option gets or sets the size of the output buffer. The value is a `size_t`, which is the size in bytes.

`SO_RCVBUF` ¶

  This option gets or sets the size of the input buffer. The value is a `size_t`, which is the size in bytes.

`SO_STYLE` ¶
`SO_TYPE` ¶

  This option can be used with `getsockopt` only. It is used to get the socket’s communication style. `SO_TYPE` is the historical name, and `SO_STYLE` is the preferred name in GNU. The value has type `int` and its value designates a communication style; see Communication Styles.

`SO_ERROR` ¶

  This option can be used with `getsockopt` only. It is used to reset the error status of the socket. The value is an `int`, which represents the previous error status.