gpt4 book ai didi

c++ - TCP WSASend 完成标准

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:46:45 24 4
gpt4 key购买 nike

我无法找到 TCP WSASend 调用完成意味着什么的规范。 WSASend 操作的完成是否需要接收到 ACK 响应?

此问题与具有 200 毫秒 - 2 秒 ping 超时的较慢网络相关。调用 WSASend 完成回调(或使用任何完成机制)需要 200 毫秒 - 2 秒吗?或者可能只有在某些数据包上,Windows 才会等待 ACK 并认为 WSASend 操作对所有其他数据包的完成速度更快?

确切的行为对缓冲区生命周期管理有很大影响,进而对性能有重大影响(锁定、分配/解除分配和引用计数)。

最佳答案

WSASend 不保证以下内容:

  1. 数据已发送(可能已缓冲)
  2. 已收到(可能已丢失)
  3. 接收应用程序处理了它(发件人原则上永远不会知道这一点)

它不需要往返。事实上,在启用 nagling 的情况下,少量数据总是缓冲 200 毫秒,希望应用程序发送更多数据。 WSASend 必须快速返回,以便 nagling 有机会发挥作用。

如果您需要确认,请更改应用程序协议(protocol),以便您得到确认。没有其他方法可以做到这一点。

澄清一下,即使没有唠叨 (TCP_NODELAY),您也不会收到发送操作的 ACK。它将被发送到网络,但远程端不知道它应该 ACK。 TCP 没有办法说“请立即确认此数据”。正在发送的数据并不意味着它将永远被接收。数据被插入黑洞后,网络可能会掉线一秒钟。

关于c++ - TCP WSASend 完成标准,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21093128/

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