1

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

4

1 回答 1

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>包裹了插座。

还是有其他解决方案?根据端口,我将确保套接字安全,而在其他情况下,我不会只需要返回类型为 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 中,这可能并不容易,因为您不能允许将其删除。

于 2012-11-26T13:40:35.920 回答