An IoctlOption? would wrap the arguments to possible ioctl calls.
eg.
template <int OptionValue?, typename ValueType?> struct ioctl_option { ioctl_option(const ValueType?& ov) : value(ov) {}
BOOST_STATIC_CONSTANT(int, option = OptionValue?); ValueType? value; static int size() {return sizeof(ValueType?); } };
// non-blocking ioctl typedef ioctl_option<FIONBIO, u_long> socket_ioctl_non_blocking;
// user code ..... socket_base socket; socket.ioctl(socket_ioctl_non_blocking(true));
It might be worth considering IoctlOption as a SocketOption, with a different option level.