【问题标题】:What socket send/recv operations can run concurrently using Boost.Asio哪些套接字发送/接收操作可以使用 Boost.Asio 同时运行
【发布时间】:2014-09-19 20:33:13
【问题描述】:

我知道可以在 TCP 和 UDP 套接字上同时运行 async_send 和 async_receive 操作。但是在这些情况下的预期行为是什么:

  1. 在 UDP 套接字上同时调用两个 async_send 操作。
  2. 在 UDP 套接字上同时调用两个 async_receive 操作。
  3. 在 TCP 套接字上同时调用两个 async_send 操作。
  4. 在 TCP 套接字上同时调用两个 async_receive 操作。

我主要对第一种情况感兴趣;由于 UDP 不一定保留发送数据包的顺序,因此我不太关心它们是否按照与调用 async_send 的顺序不同的顺序发送。

【问题讨论】:

    标签: sockets tcp udp boost-asio


    【解决方案1】:

    与没有 Boost ASIO 的情况相同:

    在一个 UDP 套接字上同时调用两个 async_send 操作。

    两个数据报都将被发送。

    在一个 UDP 套接字上同时调用两个 async_receive 操作。

    哪个操作将接收下一个数据报是任意的,但两个操作都会正常运行。

    在一个 TCP 套接字上同时调用两个 async_send 操作。

    数据可能会以不可预知的方式交错。

    在一个 TCP 套接字上同时调用两个 async_receive 操作。

    数据可能会以不可预知的方式交错。

    【讨论】:

    • 谢谢,这正是我所希望的。由于(正如您的回答所暗示的那样)ASIO 知道这种用法,如果我可能的话,下一个问题是 POSIX 和 Win 套接字是否都保证这种行为。
    • @PeterJankuliak 我不确定他们是否正式保证,但这是我所知道的每个实现的可靠行为。
    猜你喜欢
    • 1970-01-01
    • 2016-07-28
    • 1970-01-01
    • 2019-07-04
    • 2011-06-10
    • 2013-11-13
    • 1970-01-01
    • 2021-07-08
    • 1970-01-01
    相关资源
    最近更新 更多