原始套接字疙瘩我的包,但我希望它是实时的

时间:2016-10-01 08:03:23

标签: linux sockets real-time

我试图在我的Beaglebone Black板上制作一个EtherCAT主机,我用Xenomai 3.3将内核映像替换为v4.18。

我有一个小小的演示来描述基本机制。为了简化我的问题,我删除了一些无用的代码。

int socketfd = socket(AF_PACKET, SOCK_RAW, IPPROTO_RAW);
sigemptyset(&sigset);
sigaddset(&sigset, SIGALRM);
pthread_sigmask(SIG_BLOCK, &sigset, NULL);
timer_create(CLOCK_MONOTONIC, NULL, &timer);
timer_settime(timer, 0, &interval, NULL);
while(1)
{
    sigwaitinfo(&sigset, &siginfo);
    sendto(socketfd, data, len, 0, (struct sockaddr*)&socket_address, sizeof(struct sockaddr_ll));
}

当代码开始运行时,另一台PC通过Wireshark捕获包。

在Wireshark的监视器上: Wireshark Image

当我将间隔时间设置为500us时,您可以看到一些包可以及时到达,但有些包可以同时发送。

如果我将间隔更改为100us,可能是树或四个包被集中。

只有将间隔设置为1ms以上时,包才会停止结块。

您有什么想法来解决这个问题吗?或者我只能在1ms以上的时间内运行此代码?

0 个答案:

没有答案