我正在将库转换为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_;
};
Run Code Online (Sandbox Code Playgroud)
并且有一堆参考的处理程序socket_.(例如,我有socket_.is_open()几个地方,需要成为secureSocket_.lowest_layer().is_open()另一个插座.)
任何人都可以建议最好的方法来解决这个问题吗?我宁愿不为此目的创建一个单独的类,因为这意味着要复制很多代码.
编辑:我改写了我原来的问题,因为我误解了OpenSSL函数的用途.