套接字读取和时间戳

当从Linux中的(非流)套接字读取时,我可以通过ioctl(sock, SIOCGSTAMP, &tv)获取最后收到的消息的(硬件生成的)时间戳。 但是,这会带来两个问题:

  • 这是另一个系统调用(我每秒收到大约24000条消息,所以每个系统调用都要通知)
  • 如果使用这种方法,我一次只能read()一条消息,然后是ioctl()来获取时间戳。 (如果我在read() call中读取多条消息,则以下ioctl仅生成最后一条消息的时间戳。)

我的问题是如何在尽可能少的系统调用中实现接收消息及其时间戳。 如果存在一个具有语义的系统调用,例如“读取待处理的消息及其时间戳”,那将是完美的。

使用recvmmsg(2)系统调用(如果内核可用),并设置SO_TIMESTAMP选项。