Как получить собственный дескриптор файла сокета из boost :: asio :: ssl :: stream? - PullRequest
0 голосов
/ 01 ноября 2019

Я использую 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 розетка?

Спасибо.

С уважением.

Ответы [ 2 ]

0 голосов
/ 01 ноября 2019

Не делай этого вообще. Это немного более громоздко, но вы должны вместо этого определить опцию сокета , все, что вам нужно сделать, это определить тот, который может принимать протокол и возвращать опции, которые вы перечислили здесь, это пример для SOL_TCP.

class TCPUserTimeout{
template<typename Protocol>
int name(Protocol p){ return TCP_USER_TIMEOUT;}
// And so on...
};

Вы можете даже построить что-то общее, используя быстрые и грязные структуры для всех вариантов. Если вы это сделаете, я рекомендую использовать unique_ptr для хранения option_value

0 голосов
/ 01 ноября 2019

ssl::stream::native_handle() возвращает дескриптор потока SSL (в случае OpenSSL типа SSL*).

Чтобы получить дескриптор нижележащего сокета, используйте ssl::stream::lowest_layer():

setsockopt( sslStream.lowest_layer().native_handle(), ...
...