gpt4 book ai didi

c - 查看是否通过 tcp 传递了消息

转载 作者:可可西里 更新时间:2023-11-01 02:54:28 26 4
gpt4 key购买 nike

当我通过 TCP 流发送 ()/写入 () 消息时,我如何才能确定这些字节是否已成功传送?

接收方确认通过 tcp 接收字节,因此发送方 tcp 堆栈应该知道。

但是当我 send() 一些字节时,send() 立即返回,即使数据包不能(还)被传送,我在 linux 2.6.30 上使用 netcat 上的 strace 测试了它,在发送之前拔掉我的网络电缆一些字节。

我正在开发一个应用程序,在这个应用程序中,了解消息是否已传递非常重要,但实现 tcp 功能(“确认消息 #123”)感觉很尴尬,必须有更好的方法。

最佳答案

发送方 TCP 确实知道数据何时被另一端确认,但它这样做的唯一原因是它知道何时可以丢弃数据(因为其他人现在负责将其发送到应用程序另一边)。

它通常不会向发送应用程序提供此信息,因为(尽管看起来)它实际上对发送应用程序意义并不多。确认并不意味着接收应用程序已获取数据并对其进行了一些合理的操作——它只意味着发送 TCP 不再需要担心它。数据可能仍在传输中 - 例如,在中间代理服务器内,或在接收 TCP 堆栈内。

“数据成功接收”实际上是一个应用程序级别的概念——它的含义因应用程序而异(例如,对于许多应用程序来说,只有在数据同步到磁盘后才认为数据“已接收”才有意义在接收端)。因此,这意味着您必须自己实现它,因为作为应用程序开发人员,您确实是唯一知道如何为您的应用程序明智地实现它的人。

关于c - 查看是否通过 tcp 传递了消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26555371/

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