Estoy en el proceso de convertir una biblioteca a Boost.Asio (que ha funcionado muy bien hasta ahora), pero he tropezado con un obstáculo en lo que respecta a una decisión de diseño.¿Usa sockets SSL y sockets no SSL simultáneamente en Boost.Asio?
Boost.Asio proporciona compatibilidad con SSL, pero se debe utilizar un tipo boost::asio::ssl::stream<boost::asio::ip::tcp::socket>
para el socket. Mi biblioteca tiene la opción de conectarse a servidores SSL o conectar con normalidad, por lo que he hecho una clase con dos tomas como esta:
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_;
};
y dentro hay un montón de los manipuladores que hacen referencia a socket_
. (Por ejemplo, tengo socket_.is_open()
en varios lugares, que necesitarían convertirse en secureSocket_.lowest_layer().is_open()
para el otro socket).
¿Alguien puede sugerir la mejor manera de hacerlo? Prefiero no crear una clase separada solo para este propósito, porque eso significaría duplicar mucho código.
Editar: Reformé mi pregunta original porque entendí mal el propósito de una función de OpenSSL.
El primer enfoque es lo que terminé haciendo, pero me gusta la idea abstracta de clase. Lo echaré un vistazo, gracias. – DSB