Одновременное использование сокетов SSL и сокетов без SSL в Boost.Asio?

Я сейчас конвертирую библиотеку в Boost.Asio (которая пока работает очень хорошо), но я наткнулся на камень преткновения в отношении дизайнерского решения .

Boost.Asio обеспечивает поддержку SSL, но boost :: asio :: ssl :: stream должен использоваться для сокета. В моей библиотеке есть возможность подключаться к серверам SSL или подключаться обычным образом, поэтому я создал класс с двумя сокетами вроде этого:

class client : public boost::enable_shared_from_this<client>
{
public:
    client(boost::asio::io_service & io_service, boost::asio::ssl::context & context) : socket_(io_service), secureSocket_(io_service, context) {}
private:
    boost::asio::ip::tcp::socket socket_;
    boost::asio::ssl::stream<boost::asio::ip::tcp::socket> secureSocket_;
};

А внутри есть несколько обработчиков, которые ссылаются на socket_ . (Например, у меня есть socket_.is_open () в нескольких местах, который должен стать secureSocket_.lowest_layer (). Is_open () для другого сокета.)

Может ли кто-нибудь предложить лучший способ сделать это? Я бы предпочел не создавать отдельный класс только для этой цели, потому что это означало бы дублирование большого количества кода.

Изменить: я перефразировал свой исходный вопрос, потому что я неправильно понял назначение функции OpenSSL.

24
задан DSB 18 January 2011 в 10:50
поделиться