You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Python的socket.sendmsg获取Socket Tx时间戳?

Linux Socket发送时间戳问题

通过查阅相关文档可知,Linux系统中可通过设置Socket选项请求收发数据包的时间戳。目前已能使用SO_TIMESTAMPNS和SO_TIMESTAMPING配合recvmsg获取接收(Rx)时间戳,但存在两个问题:

  • 不知道如何为sendmsg的控制消息正确打包辅助数据
  • sendmsg没有返回发送时间戳的途径

另外,内核网络文档的1.3.4节提到,可通过控制消息启用时间戳,无需使用socket.setsockopt预留开销——这意味着调用sendmsg时需在控制消息中添加对应标志,而非提前通过setsockopt配置Socket选项。

以下是获取接收时间戳的示例代码:

import socket

SO_TIMESTAMPING = 37
SOF_TIMESTAMPING = 127

server_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
server_sock.setsockopt(socket.SOL_SOCKET, SO_TIMESTAMPING, SO_TIMESTAMPING, SOF_TIMESTAMPING)

server_sock.bind((_svr_ip, _svr_port))
server_sock.listen(_num_clients)
conn, client_addr = server_sock.accept()

msg, ancdata, flags, address = conn.recvmsg(64, 1024)

t_rx = ancdata[0][2]
t_rx_s = int.from_bytes(t_rx[0:7], byteorder="little")
t_rx_ns = int.from_bytes(t_rx[8:], byteorder="little")

内容的提问来源于stack exchange,提问作者R Mason

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 21:22:02