gpt4 book ai didi

c++ - 在 boost 中将安全套接字作为普通套接字传递

转载 作者:太空宇宙 更新时间:2023-11-04 12:02:30 25 4
gpt4 key购买 nike

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

最佳答案

I have these typedefs

  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;

the problem is I need pass a secure socket as TSocket. Will a direct cast from TSecureSocket to TSocket work ?

简答题因为boost::asio::ssl::stream<TBoostSocket>包裹套接字。

or is there another solution? depending on the port I will make the socket secure and in others I will not I just need the return type to be 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 中,这可能并不容易,因为你不能允许它被删除。

关于c++ - 在 boost 中将安全套接字作为普通套接字传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13565202/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com