【问题标题】:Socket reading and timestamps套接字读取和时间戳
【发布时间】:2023-03-10 21:10:02
【问题描述】:

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

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

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

【问题讨论】:

  • 您找到解决系统调用问题的方法了吗?
  • 下面接受的解决方案是一个解决方案;只是因为我的内核版本太旧而无法使用它。

标签: c sockets timestamp system-calls


【解决方案1】:

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

【讨论】:

  • 啊,我只遇到过recvmsg,没有遇到recvmmsg。谢谢!
  • 如何使用 recvmmsg 访问时间戳?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-03
  • 1970-01-01
  • 2017-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-10
相关资源
最近更新 更多