Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sockets 在升压插座上设置选项SO_SETFIB_Sockets_Boost_Boost Asio - Fatal编程技术网

Sockets 在升压插座上设置选项SO_SETFIB

Sockets 在升压插座上设置选项SO_SETFIB,sockets,boost,boost-asio,Sockets,Boost,Boost Asio,我看不到任何选项可以设置SO_SETFIB。有人有什么想法或给我指出正确的方向如何实现吗?您可以使用boost::asio::detail::socket\u option::integersocket option帮助程序模板: typedef boost::asio::detail::socket_option::integer<SOL_SOCKET, SO_SETFIB> set_fib; // ... sock.set_option(set_fib(42)); typed

我看不到任何选项可以设置SO_SETFIB。有人有什么想法或给我指出正确的方向如何实现吗?

您可以使用
boost::asio::detail::socket\u option::integer
socket option帮助程序模板:

typedef boost::asio::detail::socket_option::integer<SOL_SOCKET, SO_SETFIB> set_fib;

// ...
sock.set_option(set_fib(42));
typedef boost::asio::detail::socket\u option::integer set\u fib;
// ...
sock.set_选项(set_fib(42));

如果Boost.Asio不支持套接字选项,则可以创建符合和/或类型要求的模型以满足自己的需要

接受对SettableSocketOption类型需求建模的对象。SettableSocketOption类型需求说明模型必须提供一些函数,这些函数返回适合传递给POSIX的值:

类选项
{
int-level(Protocol)const;//参数'level'。
int name(Protocol)const;//name参数。
const int*data(Protocol)const//“option\u value”参数。
std::size\u t size(Protocol)const//“option\u len”参数。
};
你可以想象插座。设置选项(option)就好像它是:

setsocketopt(socket.native_handle(),option.level(protocol),
选项名称(协议),选项数据(协议),
选项。大小(协议);
传递给函数的协议是类型需求的模型


下面是一个
set\u fib
类,它是SettableSocketOption的一个模型:

类集合\u fib
{
公众:
//构造具有特定值的选项。
显式集合fib(int值)
:值(值)
{}
//获取套接字选项的级别。
模板
int级别(const协议&)const{return SOL_SOCKET;}
//获取套接字选项的名称。
模板
int name(const协议&)const{return SO_SETFIB;}
//获取选项值的地址。
模板
const int*数据(const协议&)const{return&value}
//获取选项的大小。
模板
std::size\u t size(const协议&)const{return sizeof(value);}
私人:
int值;
};
用法:

boost::asio::ip::tcp::socket套接字(io\u服务);
// ...
设置fib选项(42);
插座。设置_选项(选项);

谢谢。我要试试看。你能给我指一些文件吗?我需要tcp方面的帮助,而不是设置套接字选项:resolver@BTRNaidu不幸的是,
set_选项
接口(
SettableSocketOption
概念)没有文档记录;您必须查看头文件以了解如何使用它。它确实有帮助。谢谢但现在我必须在解析器上设置套接字选项。你有相关的代码吗?@BTRNaidu我不太明白-解析器是
getaddrinfo
的包装器,它不在套接字上运行。记录在案。直接在
detail
名称空间中使用类型时,我会非常谨慎。对于这种特殊情况,
detail::socket\u option::integer
对GettableSocketOption和SettableSocketOption都建模,并且
SO\u SETFIB
是一个仅设置的套接字选项。