Я собираюсь преобразовать библиотеку в Boost.Asio(который работал очень хорошо до сих пор), но я ударил что-то вроде камнем преткновения в отношении дизайнерского решения.
Boost.Asio обеспечивает поддержку SSL, но для сокета должен использоваться тип boost::asio::ssl::stream<boost::asio::ip::tcp::socket>
. В моей библиотеке есть возможность подключиться к серверам 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.