我有这些typedef问题是我需要传递一个安全套接字,因为TSocket将从TSecureSocket直接转换为TSocket工作吗?还是有另一种解决方案?根据端口,我将使插座安全,而在其他端口,我不会。我只需要返回类型为TSocket。
typedef boost::asio::ip::tcp::socket TBoostSocket;
typedef boost::asio::ssl::stream<TBoostSocket> TSLLSocket;
typedef boost::shared_ptr<TBoostSocket> TSocket;
typedef boost::shared_ptr<TSLLSocket> TSecureSocket;
答案 0 :(得分:1)
我有这些typedef
typedef boost::asio::ip::tcp::socket TBoostSocket;
typedef boost::asio::ssl::stream<TBoostSocket> TSLLSocket;
typedef boost::shared_ptr<TBoostSocket> TSocket;
typedef boost::shared_ptr<TSLLSocket> TSecureSocket;
问题是我需要将安全套接字作为TSocket传递。请问直接 从TSecureSocket转到TSocket工作?
简答题因为boost::asio::ssl::stream<TBoostSocket>
包裹套接字。
还是有另一种解决方案?取决于我将做的端口 socket安全而在其他地方我不会只需要返回类型 是TSocket。
但是TSLLSocket
(或者boost :: asio :: ssl :: stream)提供了一种从实例中检索套接字的方法:
const next_layer_type & next_layer() const;
next_layer_type
由以下typedef定义:
typedef boost::remove_reference< Stream >::type next_layer_type;
http://www.boost.org/doc/libs/1_52_0/doc/html/boost_asio/reference/ssl__stream/next_layer_type.html
由于您使用TBoostSocket
定义了模板,这是您致电next_layer()
或lowest_layer()
当然这会返回引用而不是指针,并且该引用是指不属于您的实例。所以你现在需要以某种方式将它包装在shared_ptr中,这可能不那么容易,因为你不能允许它被删除。