2017-01-22 122 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)); 

然後從原始套接字訪問控制消息