6

从 Linux 中的(非流)套接字读取时,我可以通过ioctl(sock, SIOCGSTAMP, &tv). 然而,这带来了两个问题:

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

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

4

1 回答 1

6

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

于 2012-11-09T13:21:32.967 回答