我正在尝试获取传出数据包的准确时间戳(使用原始套接字发送).根据Linux/Documentation/networking/timestamping.txt,"对于发送时间戳,传出的数据包将循环回到套接字的错误队列,并附带发送时间戳.可以使用recvmsg(flags = MSG_ERRQUEUE)接收."
不幸的是,recvmsg总是返回-1时,在原始套接字调用(与创建socket(PF_INET, SOCK_RAW, IPPROTO_RAW),并与SO_TIMESTAMP设置为1使用setsockopt).我究竟做错了什么?有没有更好的方法来获得传出数据包的准确时间戳?
附录(资料):
我还尝试从通过UDP套接字发送的数据包中获取时间戳(下面的源代码)并recvmsg返回-1:错误是"资源暂时不可用"(EAGAIN).
附录(源代码):
#include <arpa/inet.h>
#include <linux/net_tstamp.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
void die(char* s)
{
perror(s);
exit(1);
}
int main(int argc, char* argv[])
{
char* destination_ip = "10.0.0.1";
int destination_port = 1234;
int sock;
if ((sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) < 0) {
die("socket()");
}
int timestamp_flags = …Run Code Online (Sandbox Code Playgroud)