我有一个不寻常的情况:我正在使用一个嵌入式Linux系统(英特尔盒子,目前使用2.6.20内核),它必须与一个具有部分破碎TCP实现的嵌入式系统通信。据我目前所知,他们希望我们每个消息都在单独的以太网帧中到达!当消息跨越以太网帧时,他们似乎会遇到问题。
我们与该设备在本地网络上,在我们之间没有路由器(只有交换机)。
当然,我们正试图强制他们修复他们的系统,但那可能不可行。
我已经在我的套接字上设置了TCP_NODELAY(我连接到它们),但这仅在我不尝试一次发送多个消息时才有用。如果我连续发送几条出站消息,这些消息往往会被放入一两个以太网帧中,这会对另一个系统造成麻烦。
我通常可以通过使用计时器避免发送消息过于接近来避免此问题,但这显然会限制我们的吞吐量。此外,如果我将时间降低得太低,我会冒着网络拥塞阻塞数据传输并最终允许多个消息进入同一个数据包的风险。
是否有一种方法可以告诉我驱动程序是否有数据排队?是否有一些方法可以强制驱动程序在独立的传输层数据包中发送独立的写入调用?我已经查看了socket(7)和tcp(7)手册,并没有找到任何内容。可能只是我不知道我在寻找什么。
显然,UDP将是一个出路,但同样,在这一点上我认为我们无法让另一端做出太多更改。
非常感谢任何帮助。
我们与该设备在本地网络上,在我们之间没有路由器(只有交换机)。
当然,我们正试图强制他们修复他们的系统,但那可能不可行。
我已经在我的套接字上设置了TCP_NODELAY(我连接到它们),但这仅在我不尝试一次发送多个消息时才有用。如果我连续发送几条出站消息,这些消息往往会被放入一两个以太网帧中,这会对另一个系统造成麻烦。
我通常可以通过使用计时器避免发送消息过于接近来避免此问题,但这显然会限制我们的吞吐量。此外,如果我将时间降低得太低,我会冒着网络拥塞阻塞数据传输并最终允许多个消息进入同一个数据包的风险。
是否有一种方法可以告诉我驱动程序是否有数据排队?是否有一些方法可以强制驱动程序在独立的传输层数据包中发送独立的写入调用?我已经查看了socket(7)和tcp(7)手册,并没有找到任何内容。可能只是我不知道我在寻找什么。
显然,UDP将是一个出路,但同样,在这一点上我认为我们无法让另一端做出太多更改。
非常感谢任何帮助。