套接字读取和时间戳

时间:2012-11-09 08:42:02

标签: c sockets timestamp system-calls

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

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

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

1 个答案:

答案 0 :(得分:6)

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