Linux 内核提供了几种方法来获取接收的(SO_TIMESTAMP、SO_TIMESTAMPNS、SO_TIMESTAMPING)或发送的(SO_TIMESTAMPING)数据包的时间戳。
内核文档:https://www.kernel.org/doc/Documentation/networking/timestamping.txt
有什么方法可以将它与 Python 一起使用吗?我在 Python 源代码中没有看到任何 SO_TIMESTAMP 常量。尝试了 3.6.2 和 GitHub master 分支。
现在,我只能使用 SIOCGSTAMP,它为我提供了上次接收到的数据包的时间戳,而发送数据包的时间戳似乎没有任何可用信息。
最佳答案
最后,我已经能够像这样获得 SO_TIMESTAMPNS 值:
SO_TIMESTAMPNS = 35
s = socket.socket(socket.AF_PACKET, socket.SOCK_RAW, socket.htons(3))
s.setsockopt(socket.SOL_SOCKET, SO_TIMESTAMPNS, 1)
raw_data, ancdata, flags, address = s.recvmsg(65535, 1024)
ancdata[0][2] 是作为 timespec(ulong, ulong) 的硬件时间戳。
可以在 Linux 上运行,但不能在 Mac OS X 上运行。未在 Windows 上测试。
关于Python 网络时间戳(SO_TIMESTAMP、SO_TIMESTAMPNS、SO_TIMESTAMPING),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46302308/