При чтении здесь и здесь я вижу, что в системах Linux вы можете запросить временные метки из полученных и передаваемых пакетов, установив параметры сокета. В настоящее время я могу использовать SO_TIMESTAMPNS и SO_TIMESTAMPING для получения RX TimeStams с помощью RecVMSG . С sendmsg я не знаю, как правильно упаковать вспомогательные данные для управляющего сообщения, а Sendmsg даже не имеет возврата, который может хранить данные, которые мне нужны.
Код: Выделить всё
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_rec[0:7], byteorder="little")
t_rx_ns = int.from_bytes(t_rec[8:], byteorder="little")
Раздел 1.3.4 упоминает о включении временных метков через управляющие сообщения без необходимости использовать Socket.setsockopt для резервирования накладных расходов. Я считаю, что это означает, что вы добавляете флаг в управляющее сообщение при вызове sendmsg вместо использования socket.setsockopt .
Подробнее здесь:
https://stackoverflow.com/questions/788 ... et-sendmsg