2015-09-15 110 views
4

文档似乎并没有多大提示:lowest_layer()next_layer()来自Boost Asio SSL Stream的lowest_layer()和next_layer()之间的区别

他们之间和何时使用每个之间有什么区别?

+0

SSL套接字来自非SSL套接字。 Asio通过将它包装在提供一些附加功能的容器中来创建SSL套接字,并通过向它们添加SSL风格来拦截一些活动。使用这种SSL套接字的代码将需要使用'next_layer()'来获得对底层套接字的访问,以进行SSL和非SSL套接字的一些共同活动。对'lowest_layer'的调用允许你调用普通的tcp socket的方法,比如'connect'或'accept' –

回答

3

要回答这个问题,首先要记住的是boost::asio::ssl::stream是一个模板类。通常它看起来像boost::asio::ssl::stream<boost::asio::ip::tcp::socket>。因此使用boost::asio::ip::tcp::socket来实施。那将是next_layerboost::asio::ssl::stream。另一方面,最低层始终将是basic_socket(其描述在docs)。

它的小暧昧特别是当你看到在标题tcp::socket是typedef到basic_stream_socket<Tcp>,它是直接从basic_socket继承。而..在OOP方面,你可以说“next_layer是最低层”..

但让我们再创建一个ssl::stream<MyOwnClass>的案例。在这种情况下,next_layerMyOwnClass,它应该控制数据读取/写入。并且lowest_layer将会是什么MyOwnClass将在其typedef中说。

UPD:何时使用每个。使用next_layer进行读取/写入(您不需要此连接进行SSL连接,但需要启动会话之前)。并使用lowest_layer来控制底层套接字。

相关问题