In the table below, let C denote a socket option class; let L identify the POSIX macro to be passed as the level argument to POSIX setsockopt and getsockopt; let N identify the POSIX macro to be passed as the option_name argument to POSIX setsockopt and getsockopt; and let T identify the type of the value whose address will be passed as the option_value argument to POSIX setsockopt and getsockopt.
| C | L | N | T | Requirements, definition or notes |
| socket_base:: broadcast | SOL_SOCKET | SO_BROADCAST | int | Satisfies the BooleanSocketOption ([socket.reqmts.opt.bool]) type requirements. Determines whether a socket permits sending of broadcast messages, if supported by the protocol. |
| socket_base:: debug | SOL_SOCKET | SO_DEBUG | int | Satisfies the BooleanSocketOption ([socket.reqmts.opt.bool]) type requirements. Determines whether debugging information is recorded by the underlying protocol. |
| socket_base:: do_not_route | SOL_SOCKET | SO_DONTROUTE | int | Satisfies the BooleanSocketOption ([socket.reqmts.opt.bool]) type requirements. Determines whether outgoing messages bypass standard routing facilities. |
| socket_base:: keep_alive | SOL_SOCKET | SO_KEEPALIVE | int | Satisfies the BooleanSocketOption ([socket.reqmts.opt.bool]) type requirements. Determines whether a socket permits sending of keep_alive messages, if supported by the protocol. |
| socket_base:: linger ([socket.opt.linger]) | SOL_SOCKET | SO_LINGER | linger | Controls the behavior when a socket is closed and unsent data is present. |
| socket_base:: out_of_band_inline | SOL_SOCKET | SO_OOBINLINE | int | Satisfies the BooleanSocketOption ([socket.reqmts.opt.bool]) type requirements. Determines whether out-of-band data (also known as urgent data) is received inline. |
| socket_base:: receive_buffer_size | SOL_SOCKET | SO_RCVBUF | int | Satisfies the IntegerSocketOption ([socket.reqmts.opt.int]) type requirements. Specifies the size of the receive buffer associated with a socket. |
| socket_base:: receive_low_watermark | SOL_SOCKET | SO_RCVLOWAT | int | Satisfies the IntegerSocketOption ([socket.reqmts.opt.int]) type requirements. Specifies the minimum number of bytes to process for socket input operations. |
| socket_base:: reuse_address | SOL_SOCKET | SO_REUSEADDR | int | Satisfies the BooleanSocketOption ([socket.reqmts.opt.bool]) type requirements. Determines whether the validation of endpoints used for binding a socket should allow the reuse of local endpoints, if supported by the protocol. |
| socket_base:: send_buffer_size | SOL_SOCKET | SO_SNDBUF | int | Satisfies the IntegerSocketOption ([socket.reqmts.opt.int]) type requirements. Specifies the size of the send buffer associated with a socket. |
| socket_base:: send_low_watermark | SOL_SOCKET | SO_SNDLOWAT | int | Satisfies the IntegerSocketOption ([socket.reqmts.opt.int]) type requirements. Specifies the minimum number of bytes to process for socket output operations. |
The linger class represents a socket option for controlling the behavior when a socket is closed and unsent data is present.
namespace std {
namespace experimental {
namespace net {
inline namespace v1 {
class socket_base::linger
{
public:
// constructors:
linger() noexcept;
linger(bool e, chrono::seconds t) noexcept;
// members:
bool enabled() const noexcept;
void enabled(bool e) noexcept;
chrono::seconds timeout() const noexcept;
void timeout(chrono::seconds t) noexcept;
};
} // inline namespace v1
} // namespace net
} // namespace experimental
} // namespace std
linger satisfies the requirements of Destructible (C++ 2014 [destructible]), DefaultConstructible (C++ 2014 [defaultconstructible]), CopyConstructible (C++ 2014 [copyconstructible]), CopyAssignable (C++ 2014 [copyassignable]), GettableSocketOption ([socket.reqmts.gettablesocketoption]), and SettableSocketOption ([socket.reqmts.settablesocketoption]).
Extensible implementations provide the following member functions:
namespace std {
namespace experimental {
namespace net {
inline namespace v1 {
class socket_base::linger
{
public:
template<class Protocol> int level(const Protocol& p) const noexcept;
template<class Protocol> int name(const Protocol& p) const noexcept;
template<class Protocol> void data(const Protocol& p) noexcept;
template<class Protocol> const void* data(const Protocol& p) const noexcept;
template<class Protocol> size_t size(const Protocol& p) const noexcept;
template<class Protocol> void resize(const Protocol& p, size_t s);
// remainder unchanged
private:
::linger value_; // exposition only
};
} // inline namespace v1
} // namespace net
} // namespace experimental
} // namespace std
linger() noexcept;
Postconditions: !enabled() && timeout() == chrono::seconds(0).
linger(bool e, chrono::seconds t) noexcept;
Postconditions: enabled() == e && timeout() == t.
bool enabled() const noexcept;
Returns: value_.l_onoff != 0.
void enabled(bool e) noexcept;
Postconditions: enabled() == e.
chrono::seconds timeout() const noexcept;
Returns: chrono::seconds(value_.l_linger).
void timeout(chrono::seconds t) noexcept;
Postconditions: timeout() == t.
template<class Protocol> int level(const Protocol& p) const noexcept;
Returns: SOL_SOCKET.
template<class Protocol> int name(const Protocol& p) const noexcept;
Returns: SO_LINGER.
template<class Protocol> void* data(const Protocol& p) const noexcept;
Returns: std::addressof(value_).
template<class Protocol> const void* data(const Protocol& p) const noexcept;
Returns: std::addressof(value_).
template<class Protocol> size_t size(const Protocol& p) const noexcept;
Returns: sizeof(value_).
template<class Protocol> void resize(const Protocol& p, size_t s);
Remarks: length_error if s != sizeof(value_).