Windows 中的 UDP SO_TIMESTAMP
Posted
技术标签:
【中文标题】Windows 中的 UDP SO_TIMESTAMP【英文标题】:UDP SO_TIMESTAMP in windows 【发布时间】:2011-05-26 08:32:29 【问题描述】:我想在windows中为UDP数据包实现SO_TIMESTAMP,这样我们就可以得到UDP数据包到达内核队列的时间。 请告诉 windows C++ 中的等价物以获取 SO_TIMESTAMP 等价物。
【问题讨论】:
【参考方案1】:刚刚发现:
接收时间戳
您通过 SIO_TIMESTAMPING 配置接收时间戳接收 IOCTL。使用该 IOCTL 启用接收时间戳接收。当你 使用 LPFN_WSARECVMSG (WSARecvMsg) 函数接收数据报, 它的时间戳(如果可用)包含在 SO_TIMESTAMP 控件中 消息。
SO_TIMESTAMP (0x300A) 在 mstcpip.h 中定义。控制消息 数据以 UINT64 形式返回。
见Windows Developer: Winsock timestamping和Windows Developer: Packet timestamping
Greyware Automation Products, Inc 在他们的知识库文章“常见问题解答:域时间和 NDIS 软件时间戳”中解释了一些细节:
他们表示,从 Windows 10(版本 1803 或更高版本)和 Windows Server 2019 开始,Microsoft 在 TCP/IP 网络堆栈的 NDIS 层引入了对 UDP 数据包软件时间戳的内核级支持。
必须在适当的 NIC 上启用软件时间戳,例如通过以下 Powershell 脚本:https://www.powershellgallery.com/packages/SoftwareTimestamping/1.0
IOCTL 和结构在 Windows 10 SDK 版本 2104 最低版本的 mstcpip.h 中定义!
【讨论】:
以上是关于Windows 中的 UDP SO_TIMESTAMP的主要内容,如果未能解决你的问题,请参考以下文章
Windows RT 应用程序不接收 UDP 数据报数据包。我的以太币和微软的 DatagramSample 中的以太币