繁体   English   中英

如何从 boost::asio::ssl::stream 获取本机套接字文件描述器<boost::asio::ip::tcp::socket> ?</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() returns the SSL stream handle (in case of OpenSSL of type SSL* ).

要获取底层套接字的句柄,请使用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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM