【问题标题】:What is the difference between asio::tcp::socket's async_read_some and async_receive?asio::tcp::socket 的 async_read_some 和 async_receive 有什么区别?
【发布时间】:2011-01-15 08:10:54
【问题描述】:

有什么区别:

  • boost::asio::tcp::socket::async_read_some()
  • boost::asio::tcp::socket::async_receive()

据我所知,他们的文档是相同的。

我应该更喜欢哪个?

【问题讨论】:

    标签: c++ boost-asio


    【解决方案1】:

    我相信这两者本质上是相同的。它们提供两者的原因是提供类似于 iostream(具有 read_some 成员)和套接字(具有 receive)的接口。

    正如 Peter Tseng 所指出的,async_receive 也确实有一个接受 socket_base::message_flags 的重载,而 async_read_some 不接受。

    【讨论】:

    • 对我来说很有意义。所以我想他应该“更喜欢”与他宁愿保持兼容性的界面匹配的那个。
    • async_receive 接受 socket_base::message_flags 值得一提
    • @PeterTseng:提到这就是为什么我刚刚投票赞成(显然,你的编辑)Adrien Clerc 的回答... :-)
    【解决方案2】:

    networking TR2 proposal(5.7.10.2 basic_stream_socket 成员)中的规范也相同:

    在 async_receive 上:

    效果:调用 this->service.async_receive(this->implementation, buffers, 0, handler)。

    在 async_read_some 上:

    效果:调用 this->service.async_receive(this->implementation, buffers, 0, handler)。

    所以我想这证实了杰瑞的印象。

    【讨论】:

    • 杰瑞的回答更好。给出一些理由why 这可能是这样。
    【解决方案3】:

    在这里通过两个链接向大家确认:

    1. https://github.com/boostorg/asio/blob/36eef63a9cf8ae609716d76ccb3906ff9769d53a/include/boost/asio/basic_stream_socket.hpp#L558
    2. https://github.com/boostorg/asio/blob/36eef63a9cf8ae609716d76ccb3906ff9769d53a/include/boost/asio/basic_stream_socket.hpp#L834

    代码完全相同。然而,async_receive 有一个带有 message_flags 的重载,特别是允许您指定 asio::socket_base::message_peek

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-10
      • 2011-09-19
      • 2012-09-03
      • 2014-07-06
      • 2018-02-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多