相关疑难解决方法(0)

时间戳传出数据包

我正在尝试获取传出数据包的准确时间戳(使用原始套接字发送).根据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)

c linux timestamp raw-sockets

9
推荐指数
2
解决办法
1万
查看次数

标签 统计

c ×1

linux ×1

raw-sockets ×1

timestamp ×1