gpt4 book ai didi

linux - 我需要一个 TCP 选项 (ioctl) 来立即发送数据

转载 作者:IT王子 更新时间:2023-10-29 00:25:39 28 4
gpt4 key购买 nike

我有一个不寻常的情况:我在嵌入式环境中使用 Linux 系统(Intel 盒子,目前使用 2.6.20 内核。)它必须与一个 TCP 实现部分损坏的嵌入式系统通信.据我所知,他们现在希望我们发送的每条消息都来自一个单独的以太网帧!当消息跨以太网帧拆分时,它们似乎有问题。

我们和设备在本地网络上,我们之间没有路由器(只有一个交换机)。

当然,我们正在努力迫使他们修复他们的系统,但这最终可能不可行。

我已经在我的套接字上设置了 TCP_NODELAY(我连接到它们),但这只有在我不尝试一次发送多个消息时才有用。如果我连续有几条传出消息,这些消息往往会以一个或两个以太网帧结束,这会给另一个系统带来麻烦。

我通常可以通过使用计时器避免将消息发送得太近来避免该问题,但这显然会限制我们的吞吐量。此外,如果我将时间调得太低,我会面临网络拥塞阻碍数据包传输并最终允许多个消息进入同一个数据包的风险。

有什么方法可以判断驱动程序是否有数据排队?有什么方法可以强制驱动程序在独立的传输层数据包中发送独立的写调用?我查看了 socket(7) 和 tcp(7) 手册页,但没有找到任何内容。可能只是我不知道自己在寻找什么。

显然,UDP 是一种出路,但同样,我认为此时我们无法让另一端发生太大变化。

非常感谢任何帮助。

最佳答案

IIUC,设置 TCP_NODELAY 选项应该刷新所有数据包(即 tcp.c 通过调用 tcp_push_pending_frames 实现 NODELAY 的设置)。因此,如果您在每次发送调用后设置套接字选项,您应该会得到想要的结果。

关于linux - 我需要一个 TCP 选项 (ioctl) 来立即发送数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/258883/

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