Я сейчас конвертирую библиотеку в 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.