我遇到了一个不寻常的情况:我在嵌入式环境中使用 Linux 系统(Intel box,目前使用 2.6.20 内核。)它必须与 TCP 实现部分损坏的嵌入式系统通信。据我所知,他们希望我们的每条消息都出现在单独的以太网帧中!当消息跨以太网帧拆分时,它们似乎有问题。
我们与设备在本地网络上,我们之间没有路由器(只是一个交换机)。
当然,我们正试图强迫他们修复他们的系统,但这可能最终不可行。
我已经在我的套接字上设置了 TCP_NODELAY(我连接到它们),但这只有在我不尝试一次发送多个消息时才有帮助。如果我连续有几条传出消息,这些消息往往会以一个或两个以太网帧结束,这会导致另一个系统出现问题。
我通常可以通过使用计时器来避免这个问题,以避免将消息发送得太近,但这显然会限制我们的吞吐量。此外,如果我把时间调得太低,我会冒网络拥塞阻碍数据包传输的风险,最终导致我的多个消息进入同一个数据包。
有什么方法可以判断驱动程序是否有数据排队?有什么方法可以强制驱动程序在独立的传输层数据包中发送独立的写调用?我查看了 socket(7) 和 tcp(7) 手册页,但没有找到任何东西。可能只是我不知道我在寻找什么。
显然,UDP 将是一种出路,但同样,我认为我们不能让另一端在这一点上做出任何改变。
非常感谢任何帮助。