在升压插座上设置选项 SO_SETFIB
Setting option SO_SETFIB on boost sockets
我没有看到任何在 boost sockets 上设置 SO_SETFIB 的选项。任何人有任何想法或指出我如何实现这一目标的正确方向吗?
您将使用 boost::asio::detail::socket_option::integer
套接字选项助手模板:
typedef boost::asio::detail::socket_option::integer<SOL_SOCKET, SO_SETFIB> set_fib;
// ...
sock.set_option(set_fib(42));
如果 Boost.Asio 不支持套接字选项,则可以创建任一 GettableSocketOption and/or SettableSocketOption 类型要求的模型来满足需要。
socket::set_option()
accepts an object that models the SettableSocketOption type requirement. The SettableSocketOption type requirement documents that models must provide a few functions that return values suitable to be passed to POSIX setsockopt()
:
class option
{
int level(Protocol) const; // The 'level' argument.
int name(Protocol) const; // The 'name' argument.
const int* data(Protocol) const // The 'option_value' argument.
std::size_t size(Protocol) const // The 'option_len' argument.
};
人们可以将 socket.set_option(option)
想象成:
setsocketopt(socket.native_handle(), option.level(protocol),
option.name(protocol), option.data(protocol),
option.size(protocol));
传递给函数的协议是 Protocol 类型要求的模型。
这里有一个 set_fib
class 是 SettableSocketOption 的模型:
class set_fib
{
public:
// Construct option with specific value.
explicit set_fib(int value)
: value_(value)
{}
// Get the level of the socket option.
template <typename Protocol>
int level(const Protocol&) const { return SOL_SOCKET; }
// Get the name of the socket option.
template <typename Protocol>
int name(const Protocol&) const { return SO_SETFIB; }
// Get the address of the option value.
template <typename Protocol>
const int* data(const Protocol&) const { return &value_; }
// Get the size of the option.
template <typename Protocol>
std::size_t size(const Protocol&) const { return sizeof(value_); }
private:
int value_;
};
用法:
boost::asio::ip::tcp::socket socket(io_service);
// ...
set_fib option(42);
socket.set_option(option);
我没有看到任何在 boost sockets 上设置 SO_SETFIB 的选项。任何人有任何想法或指出我如何实现这一目标的正确方向吗?
您将使用 boost::asio::detail::socket_option::integer
套接字选项助手模板:
typedef boost::asio::detail::socket_option::integer<SOL_SOCKET, SO_SETFIB> set_fib;
// ...
sock.set_option(set_fib(42));
如果 Boost.Asio 不支持套接字选项,则可以创建任一 GettableSocketOption and/or SettableSocketOption 类型要求的模型来满足需要。
socket::set_option()
accepts an object that models the SettableSocketOption type requirement. The SettableSocketOption type requirement documents that models must provide a few functions that return values suitable to be passed to POSIX setsockopt()
:
class option
{
int level(Protocol) const; // The 'level' argument.
int name(Protocol) const; // The 'name' argument.
const int* data(Protocol) const // The 'option_value' argument.
std::size_t size(Protocol) const // The 'option_len' argument.
};
人们可以将 socket.set_option(option)
想象成:
setsocketopt(socket.native_handle(), option.level(protocol),
option.name(protocol), option.data(protocol),
option.size(protocol));
传递给函数的协议是 Protocol 类型要求的模型。
这里有一个 set_fib
class 是 SettableSocketOption 的模型:
class set_fib
{
public:
// Construct option with specific value.
explicit set_fib(int value)
: value_(value)
{}
// Get the level of the socket option.
template <typename Protocol>
int level(const Protocol&) const { return SOL_SOCKET; }
// Get the name of the socket option.
template <typename Protocol>
int name(const Protocol&) const { return SO_SETFIB; }
// Get the address of the option value.
template <typename Protocol>
const int* data(const Protocol&) const { return &value_; }
// Get the size of the option.
template <typename Protocol>
std::size_t size(const Protocol&) const { return sizeof(value_); }
private:
int value_;
};
用法:
boost::asio::ip::tcp::socket socket(io_service);
// ...
set_fib option(42);
socket.set_option(option);