如何从 boost::asio::ssl::stream<boost::asio::ip::tcp::socket> 获取本机套接字文件描述器?
How to get native socket file describer from boost::asio::ssl::stream<boost::asio::ip::tcp::socket>?
我正在使用boost::asio::ssl::stream<boost::asio::ip::tcp::socket>
,但我需要运行
setsockopt(mSocket.native_handle(), SOL_TCP, TCP_USER_TIMEOUT, &tcpTimeout, sizeof(int));
我有一个编译错误:
error: invalid conversion from ‘boost::asio::ssl::stream<boost::asio::basic_stream_socket<boost::asio::ip::tcp> >::native_handle_type {aka ssl_st*}’ to ‘int’ [-fpermissive]
如何获取boost::asio
套接字的本机套接字文件描述符?
谢谢。
致以亲切的问候。
ssl::stream::native_handle()
返回SSL流句柄(如果是SSL*
类型的OpenSSL(。
要获得底层套接字的句柄,请使用ssl::stream::lowest_layer()
:
setsockopt( sslStream.lowest_layer().native_handle(), ...
根本不要这样做。它稍微麻烦一些,但你应该定义一个套接字选项,你所要做的就是定义一个可以接受协议并返回你列出的选项。这里有一个SOL_TCP的例子。
class TCPUserTimeout{
template<typename Protocol>
int name(Protocol p){ return TCP_USER_TIMEOUT;}
// And so on...
};
您甚至可以使用对所有选项都快速且肮脏的结构来构建一些通用的东西。如果您这样做,我建议使用unique_ptr
来存储option_value
相关文章:
- 理解boost::asio-async_read在无需读取内容时的行为
- C++Boost Asio Pool线程,带有lambda函数和传递引用变量
- boost::asio::steady_timer()与sleep()我应该使用哪一个
- boost::asio如何生成多个协同程序,然后加入它们
- 从 Boost ASIO 获取 epoll 描述符 io_service对象
- 如何在 Boost.Asio 中使用 Zero-copy sendmsg/receive
- C++ Boost::asio串行通信与Arduino无法写入
- 如何使用 Boost Asio 在 Android 上获取我的本地 udp IP 地址?
- boost::asio UDP 广播客户端仅接收"fast"数据包
- 执行时使用 boost::asio::d eadline_timer 时出错
- Boost.Asio/OpenSSL HTTPS GET certificate trouble
- C++ boost::asio::ip::tcp::acceptor 有时不接受连接器?
- boost::asio data owning `ConstBufferSequence`
- 如何替换此示例代码片段中已弃用的handler_type_t或 boost::asio::handler_type?
- 将 boost 序列化对象的 asio::streambuf 表示转换为 Beast 的 DynamicBody req.body()
- 如何将boost::asio::d eadline_timer 与Qt一起使用?
- 将更高的优先级设置为 boost::asio 线程处理进程
- Async_read_until限制读取的字节大小(Boost::asio)
- Boost Asio - boost::bind 导致程序崩溃
- 使用Asio(Boost)通过网络发送灵活的数据量