![]() |
1
8
IIUC,设置TCP_NODELAY选项应刷新所有数据包(即TCP.c通过调用TCP_push_pending_frames来实现NODELAY的设置)。因此,如果你在每次发送调用后设置socket选项,你应该会得到你想要的。 |
![]() |
2
2
除非你确定问题是什么,否则你无法解决问题。 如果他们犯了一个新手错误,即假设recv()只收到一条消息,那么我看不出有什么方法可以完全解决这个问题。每个以太网帧只发送一条消息是一回事,但如果在接收器调用recv()之前有多个以太网帧到达,它仍然会在一次调用中收到多条消息。 网络拥塞使得几乎不可能防止这种情况(同时保持良好的吞吐量),即使他们可以告诉你他们调用recv()的频率。 |
![]() |
3
1
也许,设置TCP_NODELAY并将MTU设置得足够低,以便每帧最多有1条消息?哦,在传出的数据包上添加“不要碎片化”标志 |
![]() |
4
0
您是否尝试过为每条消息打开一个新套接字并立即关闭它?开销可能会让人恶心,但这应该会限制你的信息。 |
![]() |
5
0
在最坏的情况下,你可以降低一个级别(原始套接字),在那里你可以更好地控制发送的数据包,但之后你必须处理TCP的所有细节。 |
![]() |
6
-1
也许你可以尝试将tcp栈置于低延迟模式:
这应该有利于尽快发送数据包,而不是组合数据。阅读tcp(7)上的文章以获取更多信息。 |
![]() |
MaPo · Linux,设置锁定ICMP_过滤器选项 5 月前 |
![]() |
user2138149 · 双栈网络服务器无法按预期处理ipv4请求 5 月前 |
![]() |
Marco · PyCharm Linux系统文件上os.stat异常 6 月前 |