套接字读取和时间戳
当从Linux中的(非流)套接字读取时,我可以通过ioctl(sock, SIOCGSTAMP, &tv)
获取最后收到的消息的(硬件生成的)时间戳。 但是,这会带来两个问题:
- 这是另一个系统调用(我每秒收到大约24000条消息,所以每个系统调用都要通知)
- 如果使用这种方法,我一次只能
read()
一条消息,然后是ioctl()
来获取时间戳。 (如果我在read()
call中读取多条消息,则以下ioctl
仅生成最后一条消息的时间戳。)
我的问题是如何在尽可能少的系统调用中实现接收消息及其时间戳。 如果存在一个具有语义的系统调用,例如“读取待处理的消息及其时间戳”,那将是完美的。
使用recvmmsg(2)
系统调用(如果内核可用),并设置SO_TIMESTAMP
选项。