提升asio-async_read(async_write)包装

Boost asio async_read (async_write) wrapper

本文关键字:write async 包装 asio-async read 提升      更新时间:2023-10-16

我正试图在boost::asio::ip::tcp::socket 上编写一个包装器

类似的东西:

class Socket {
  public:
    void async_read(AsyncReadStream & s,                     
                    const boost::asio::MutableBufferSequence & buffers,   
                    CompletionCondition completion_condition,
                    ReadHandler handler) {};
};

所以我可以无缝地使用ssl和非ssl流。。。唯一的问题是,我似乎没有找到每个参数的定义来将它们传递给boost::asio::async_read(命名空间等(

任何帮助都将不胜感激!感谢

您的主要需求似乎是"无缝使用SSL和非SSL流。"为此,您可以以公开需要使用的函数的方式包装各种流类型。

如何做到这一点的一部分是决定如何进行内存管理。MutableBufferSequence不是一个类型,它为要在该上下文中使用的类型定义了一组要求。

如果你要使用少量方法中的一种,你可以在接口中使用它们(只要它符合MutableBufferSequence/ConstBufferSequence的要求,就可以了(。这样做的缺点是缓冲区管理成为接口的一部分。

如果你想保持asio缓冲区管理的灵活性,那么你可以

  • 将代码模板化为流类型,以实现无缝的SSL/非SSL要求。

  • 使用缓冲区类型上的模板化方法为各种流类型创建一个包装器。

(更新了回复;当我的时间不到两分钟时,我不应该试图回答这样的问题!(