1

我正在尝试将原始以太网数据包从 linux 机器传输到微控制器。我必须使用原始数据包,因为微发送原始帧并且它没有任何 tcp/ip 堆栈。

fd = socket(AF_PACKET, SOCK_RAW, IPPROTO_RAW);
sendto(fd, sendbuf, 64, 0, (struct sockaddr*)&socket_address, sizeof(struct sockaddr_ll))

虽然我可以正确发送和接收所有帧,但我无法实时完成。例如,我在 linux 机器上有一个数据包,应该每 20 毫秒发送一次。我观察到的是,虽然我平均每 20 毫秒传输一个数据包,但我不是20 毫秒看到一次。我认为这是因为处理器在发送之前试图缓冲一些消息。我像这样更改了缓冲区-

int buff = 1;

(setsockopt(fd, SOL_SOCKET, SO_SNDBUF, &buff, sizeof(int))

仍然没有看到任何效果。有没有办法在原始套接字中有信息时立即清除原始套接字的传输缓冲区,而不是等待一些消息缓冲?还是我对延迟的理解是错误的?

4

0 回答 0