![]() |
1
8
iiuc,设置tcp_nodelay选项应刷新所有数据包(即tcp.c通过调用tcp_push_pending_frames实现nodelay的设置)。所以,如果在每次发送调用之后设置socket选项,那么应该得到您想要的。 |
![]() |
2
2
除非你确定问题是什么,否则你不能解决问题。 如果他们犯了一个新犯的错误,假设recv()只收到一条消息,那么我看不出一种完全解决它的方法。每个以太网帧只发送一条消息是一回事,但是如果在接收器调用recv()之前到达多个以太网帧,那么在一次调用中仍然会收到多条消息。 网络拥塞几乎不可能阻止这种情况(同时保持适当的吞吐量),即使他们可以告诉您他们调用recv()的频率。 |
![]() |
3
1
也许,设置tcp_nodelay并将mtu设置得足够低,以便每帧最多有一条消息?哦,在发送的数据包上添加“不要分段”标志 |
![]() |
4
0
您是否尝试为每条消息打开一个新的套接字并立即关闭它?开销可能令人恶心,但这应该界定您的消息。 |
![]() |
5
0
在最坏的情况下,您可以降低一个级别(原始套接字),在那里您可以更好地控制发送的数据包,但随后您必须处理TCP的所有细节。 |
![]() |
6
-1
也许您可以尝试将TCP堆栈置于低延迟模式:
这应该有利于尽可能快地发送数据包,而不是合并数据。更多信息,请阅读TCP(7)上的手册。 |
![]() |
CaTx · 使用带有一个大于号和两个大于号的回波的区别 2 年前 |
![]() |
Ari157 · x86_64 Linux程序集中的逻辑与实现 2 年前 |
![]() |
Ty Q. · 分段故障GLFW3/GLAD 2 年前 |
![]() |
ShortArrow · 如何使用git管理链接源文件? 2 年前 |
![]() |
Bastien L. · 多Linux Grafana集成 2 年前 |