簡體   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