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_).