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

linux – 我需要一个TCP选项(ioctl)来立即发送数据,第1张

概述我有一个不寻常的情况:我在嵌入式情况下使用 Linux系统(英特尔盒子,当前使用2.6.20内核.),它必须与具有部分损坏的TCP实现的嵌入式系统通信.就像我现在所知,他们希望我们的每条消息都来自一个单独的以太网帧!当消息在以太网帧中分离时,它们似乎有问题. 我们在设备的本地网络上,我们之间没有路由器(只是一个交换机). 当然,我们试图强迫他们修复他们的系统,但这可能最终不可行. 我已经在我的套接 我有一个不寻常的情况:我在嵌入式情况下使用 Linux系统(英特尔盒子,当前使用2.6.20内核.),它必须与具有部分损坏的TCP实现的嵌入式系统通信.就像我现在所知,他们希望我们的每条消息都来自一个单独的以太网帧!当消息在以太网帧中分离时,它们似乎有问题.

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

当然,我们试图强迫他们修复他们的系统,但这可能最终不可行.

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

我通常可以通过使用计时器来避免问题,以避免过于靠近地发送消息,但这显然限制了我们的吞吐量.此外,如果我把时间调低得太低,我冒着网络拥塞的风险,阻止数据包传输并最终允许我的多条消息进入同一个数据包.

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

显然,UDP将是一条出路,但同样,我认为我们不能在这一点上让对方做出任何改变.

任何帮助非常感谢.

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

以上是内存溢出为你收集整理的linux – 我需要一个TCP选项(ioctl)来立即发送数据全部内容,希望文章能够帮你解决linux – 我需要一个TCP选项(ioctl)来立即发送数据所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/1049146.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存