
Greetings, On UNIX-like platforms, boost::asio::detail::socket_option::{boolean,integer} templates are very useful when defining socket option classes for non-standard options that are supported by the platform, e.g.: namespace so = boost::asio::detail::socket_option; typedef so::boolean<SOL_SOCKET, SO_REUSEADDR> reuse_addr; typedef so::boolean<SOL_SOCKET, SO_REUSEPORT> reuse_port; typedef so::boolean<SOL_SOCKET, SO_ERROR> pending_error; typedef so::integer<SOL_SOCKET, SO_SNDLOWAT> send_low_watermark; typedef so::integer<SOL_SOCKET, SO_RCVLOWAT> recv_low_watermark; typedef so::boolean<IPPROTO_IP, IP_HDRINCL> include_header; typedef so::boolean<IPPROTO_IP, IP_DONTFRAG> do_not_fragment; typedef so::integer<IPPROTO_IP, IP_TOS> type_of_service; typedef so::integer<IPPROTO_IP, IP_TTL> time_to_live; ... and so on. It is not suitable to include these non-standard options in the asio library itself, but it seems justifiable to move the boolean/integer templates out of boost::asio::detail and into boost::asio. Also, many socket options take a C struct as an argument, so a template for such options might be useful as well: template <int Level, int Name, class Value> class typed : public Value { typedef Value value; template <typename Protocol> int level(const Protocol &) const { return Level; } template <typename Protocol> int name(const Protocol &) const { return Name; } template <typename Protocol> value *data(const Protocol &) { return (value *)this; } template <typename Protocol> std::size_t size(const Protocol &) const { return sizeof(Value); } template <typename Protocol> void resize(const Protocol &, std::size_t s) const { if (s != sizeof(Value)) throw std::length_error("resizing fixed-length socket option"); } }; Then it becomes trivial to define and use such socket options: typedef typed<SOL_SOCKET, SO_SNDTIMEO, struct ::timeval> send_timeout; typedef typed<SOL_SOCKET, SO_RCVTIMEO, struct ::timeval> recv_timeout; send_timeout sndtimeo; sndtimeo.tv_sec = 1; sndtimeo.tv_usec = 0; Would this template be appropriate for inclusion in a future version of asio? Just my $.02. Cheers, Eugene
participants (1)
-
Eugene M. Kim