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 中的以太币

Windows Phone 8 上的 UDP 多播组

UDP 测试代码不接收消息 (C++)

win7如何设允许udp组播

Windows,UDP数据包静默丢弃

有没有windows下c语言实现udp协议的代码