gpt4 book ai didi

c++ - 什么是 boost::asio::write 保证(ACK,校验和)?

转载 作者:可可西里 更新时间:2023-11-01 02:33:40 29 4
gpt4 key购买 nike

我有一个关于 boost::asio::ip::tcp::socket 和相关写入函数的问题。从阅读 Wikipedia article在 TCP 上,据我所知,TCP 包含确认消息以及校验和。不幸的是,我在 boost::asio 引用资料中找不到任何相关信息。据我了解,boost::asio 使用 TCP 的操作系统实现,它应该包含这两个功能。

我的问题是函数 boost::asio::writeboost::asio::async_write 在使用 boost::调用时保证什么asio::ip::tcp::socket。那么如果函数返回/调用回调函数没有错误是什么意思呢。我可以想象一些可能性:

  1. 基本上没有,它只是意味着程序告诉操作系统发送数据,仅此而已。
  2. 数据正在进行中,意味着操作系统确认它已发送数据。
  3. 数据已到达,表示已收到对方的确认消息。
  4. 数据已到达且未损坏,与 3 相同,加上校验和相加。

如果不是 4. 有没有办法使用 boost::asio 强制执行此操作(我的意思是在 boost::asio 中,而不是自己实现)?

最佳答案

它是#1,它应该是这样的。无法保证数据一定会被发送。

你认为你想要#4,但你真的不需要。远程对等点的网络堆栈接收到正确数据的事实可能与您的应用程序无关。你真的很想知道数据是否被正确接收和处理,这超出了 TCP 的范围,但很容易在 TCP 之上实现。 (我建议阅读 OSI Model 以了解 TCP 可以做什么的介绍。基本上,您希望确保您的数据到达正确的应用程序,或者更多,而 TCP 仅确保它到达最远的地方作为运行应用程序的计算机。)

要执行您想要的操作,请通过 TCP 链接发送带内确认。您还可以将 SHA-2 或其他一些数据哈希值放入确认中。您也可以等到数据被处理后再发送确认——例如,等到数据被写入磁盘并且 fsync() 被调用。

关于c++ - 什么是 boost::asio::write 保证(ACK,校验和)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14392469/

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