Jea*_*que 5 python linux networking linux-kernel python-3.x
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)
Run Code Online (Sandbox Code Playgroud)
ancdata[0][2] 是作为 timespec(ulong, ulong) 的硬件时间戳。
可以在 Linux 上运行,但不能在 Mac OS X 上运行。未在 Windows 上进行测试。