gpt4 book ai didi

c - 两个 TCP/IP 套接字 send() 请求实际上在一个 TCP 消息中处理

转载 作者:太空狗 更新时间:2023-10-29 16:01:43 25 4
gpt4 key购买 nike

我的 C 程序中有两个 send() 并查看 wireshark,我意识到它们是作为一个 TCP/IP 消息发送的。我假设这是某种 TCP/IP 优化,确定它们足够小,可以一起发送。但是,我正在从头开始重建一个旧程序,并且我正在根据它的 TCP/IP 流量构建我的工具:MTU 限制、内部协议(protocol)设计等。因此,如果旧工具发出两条单独的消息,我需要发出两条单独的消息。

所以有没有人知道它在后台具体做了什么(除了简单的优化)以及是否有一个标志或需要启用/禁用的东西,以便我得到 1 比 1 的 C send()s和 TCP/IP 传输?现在我能做的就是让它们分开,就是在每个 send() 之后放置一个 sleep(1)。

谢谢。

最佳答案

您可以在 setsockopt 中设置 TCP_NODELAY 以禁用 Nagle 算法,以防止您的操作系统合并小数据包。但是,重要的是要认识到 TCP 是一种面向流的协议(protocol),各个“数据包”并不打算进行有意义的分离。一路上的路由器可以自由组合或拆分 TCP 数据包(尽管这并不常见,因为需要额外的处理),并且接收操作系统不一定会在每个 recv() 中准确读取一个已发送的数据包。如果您想描述 TCP 中的信息包,则需要使用 header 结构来报告以下字节中有多少属于该数据包。

关于c - 两个 TCP/IP 套接字 send() 请求实际上在一个 TCP 消息中处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23663775/

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