Windows 中的 UDP SO_TIMESTAMP

vis*_*hal 6 windows timestamp udp

我想在windows中为UDP数据包实现SO_TIMESTAMP,这样我们就可以在内核队列中获取UDP数据包的到达时间。请告诉 Windows C++ 中的等效项以获取 SO_TIMESTAMP 等效项。

Nor*_*rtM 0

刚刚发现这个:

接收时间戳

您可以通过 SIO_TIMESTAMPING IOCTL 配置接收时间戳接收。使用该 IOCTL 启用接收时间戳接收。当您使用 LPFN_WSARECVMSG (WSARecvMsg) 函数接收数据报时,其时间戳(如果可用)包含在 SO_TIMESTAMP 控制消息中。

SO_TIMESTAMP (0x300A) 在 mstcpip.h 中定义。控制消息数据以 UINT64 形式返回。

请参阅Windows Developer:Winsock 时间戳Windows Developer:数据包时间戳

Greyware Automation Products, Inc在其知识库文章“常见问题解答:域时间和 NDIS 软件时间戳”中解释了一些详细信息:

他们表示,从 Windows 10(版本 1803 或更高版本)和 Windows Server 2019 开始,微软在 TCP/IP 网络堆栈的 NDIS 层引入了对 UDP 数据包软件时间戳的内核级支持。

必须在适当的 NIC 上启用软件时间戳,例如通过以下 Powershell 脚本启用: https: //www.powershellgallery.com/packages/SoftwareTimestamping/1.0

IOCTL 和结构在 Windows 10 SDK 版本 2104 最低版本的 mstcpip.h 中定义!