2017-01-22 76 views
2

我想检索使用boost asio接收的UDP数据包的接收时间戳。提升UDP数据包的时间戳

我发现内核提供了socket选项SO_TIMESTAMP,它应该允许NIC在接收数据包时生成一个时间戳。 我还发现这个旧的ticket正在提出一个补丁来增加对SO_TIMESTAMP的支持。

我使用升压1.60.0,我不能启用该选项:

ip::udp::socket sock; 
... 
sock.set_option(ip::unicast::timestamp(true)); 

我怎样才能检索到一个UDP数据包的接收时间与升压和计算所经过的时间,因为接待的时候我收到数据包与同步或异步读取?

回答

1

看来升压还没有实现这个选项是,您可以使用本机插座做,如果你的平台支持辅助数据:

int received = recvmsg(socket, &msgh, 0); 
struct msghdr msgh; 
struct cmsghdr *cmsg; 
for (cmsg = CMSG_FIRSTHDR(msgh); cmsg != NULL; cmsg = CMSG_NXTHDR(msgh, cmsg)) { 
    if ((cmsg->cmsg_level == SOL_SOCKET) &&(cmsg->cmsg_type == SO_TIMESTAMP)) 
     // read the timestamp 
} 

int socket = sock.native(); 
int opt = 1; 
setsockopt(sock, SOL_SOCKET, SO_TIMESTAMP, &opt, sizeof(opt)); 

然后从原始套接字访问控制消息