将安全套接字作为普通套接字传递给boost

时间:2012-11-26 12:50:04

标签: c++ boost-asio shared-ptr

我有这些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;

我看过这个 boost::asio convert socket to secure

1 个答案:

答案 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;

http://www.boost.org/doc/libs/1_52_0/doc/html/boost_asio/reference/ssl__stream/next_layer/overload1.html

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中,这可能不那么容易,因为你不能允许它被删除。