Boost Asio SSL Stream 中的 lower_layer() 和 next_layer() 之间的区别

Ale*_*iea 7 c++ ssl boost boost-asio

文档似乎并没有说明太多:lower_layer()next_layer()

它们之间有什么区别以及何时使用它们?

PSI*_*Alt 7

要回答这个问题,首先要记住的是boost::asio::ssl::stream模板类。通常它看起来像boost::asio::ssl::stream<boost::asio::ip::tcp::socket>。因此是使用实现的boost::asio::ip::tcp::socket。这将是的next_layerboost::asio::ssl::stream。另一方面,lowest_layer始终是 a basic_socket(其在文档中进行了描述)。

它有点含糊不清,特别是当您在标头中看到tcp::sockettypedef to时basic_stream_socket<Tcp>,它是直接继承自 的basic_socket。而且..用OOP术语你可以说“next_layer是最低层”..

但让我们来看另一种情况,您创建了一个ssl::stream< MyOwnClass >. 在这种情况下next_layerMyOwnClass,它应该控制数据读/写。最低层将是MyOwnClasstypedef 中所说的任何内容。

UPD:何时使用每个。使用next_layer进行读/写(对于 SSL 连接,您不需要它,但在 starttls 会话之前需要它)。并使用lowest_layer来控制底层socket。