如何通过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
相关产品推荐
相关产品推荐

