发布摘要:AF_UNIX稳定发送,突发接收。Unix域套接字:使延迟恒定
我有一个应用程序B通过unix域数据报套接字接收数据。有对等应用程序A向其发送数据。 A和B都连续运行(并且是SCHED_FIFO)。我的应用程序A也打印接收时间。
对等应用程序B可以在不同的时间发送数据(仅以毫秒为单位)。理想情况下(我所期望的)分组发送延迟应该与接收延迟完全匹配。例如:
A sends in time : 5ms 10ms 15ms 21ms 30ms 36ms
B should receive in time : 5+x ms 10+x ms 15+x ms 21+x ms ...
其中x是一个常数延迟。
但是,当我尝试了我B中观察的是:
A sends in time : 5ms 10ms 15ms 21ms 30ms 36ms
B received in time : 5+w ms 10+x ms 15+y ms 21+z ms ...
(W,X,Y,Z是不同的恒定延迟)。所以我无法预测发送时间时的接收时间)。
是因为unix域套接字中涉及到一些缓冲区?请为此问题提出一些解决方法,以便从发送时间可以预测接收时间。我需要1毫秒的准确度。
(我用香草的Linux内核3.0)
注意:我得到了一个可以调整的参数/ proc/sys/net/unix/max_dgram_qlen,它可以设置为1.但仍然存在问题。也可能是调度延迟。 –
它是UDP还是Unix域套接字?它不能兼而有之。另外,为什么你需要1毫秒的精度?如果它不可行会怎么样?你的recv()阻塞还是非阻塞? –
@John我的意思是AF_UNIX和SOCK_DGRAM都是 –