【发布时间】:2023-03-10 21:10:02
【问题描述】:
从 Linux 中的(非流)套接字读取时,我可以通过 ioctl(sock, SIOCGSTAMP, &tv) 获取最后接收到的消息的(硬件生成的)时间戳。然而,这带来了两个问题:
- 这是另一个系统调用(我每秒接收大约 24000 条消息,因此每个系统调用都是需要通知的)
- 如果使用这种方法,我一次只能
read()一条消息,然后是ioctl()来获取时间戳。 (如果我在read()-call 中读取多条消息,则以下ioctl只会产生最后一条消息的时间戳。)
我的问题是如何在尽可能少的系统调用中实现接收消息及其时间戳。如果有一个系统调用,其语义如“读取与待处理消息及其时间戳一样多的消息”,那将是完美的。
【问题讨论】:
-
您找到解决系统调用问题的方法了吗?
-
下面接受的解决方案是一个解决方案;只是因为我的内核版本太旧而无法使用它。
标签: c sockets timestamp system-calls