2015-06-22 56 views
0

我需要在套接字中设置或获取RTT(AF_INET,SOCK_RAW, IPPROTO_TCP)的方式。如何在Linux套接字编程中设置/获取套接字RTT?

接下来我需要做什么来在套接字编程中控制这样的RTT?换句话说,如何找到这样的RTT参数?

+0

有针对该API中没有的功能。只需要向另一端发送一条消息,让另一端发回消息并计时。不那么难。 –

+0

请问[tcp-timestamp](http://ithitman.blogspot.in/2013/02/tcp-timestamp-demystified.html)选项有帮助吗? –

+0

它没有设置,它由TCP测量。 – EJP

回答

1

为了测量往返时间(RTT)编写一个简单的客户机 - 服务器应用程序,其中一个节点:

  1. 读取当前时间与clock_gettime()
  2. 使用write()在将消息发送到所述另一节点(已打开)套接字
  3. 等待后面使用read()
  4. 消息读取使用当前时间clock_gettime()

RTT是两次之间的差异。

+0

POSIX.1-2008将'gettimeofday(2)'标记为过时。应该使用'clock_gettime(2)'(或'time(2)')。 –

+0

对。固定。谢谢。 – Claudio

0

在Linux上,你可以通过调用getsockopt()TCP_INFO得到RTT:

#include <sys/socket.h> 
#include <netinet/in.h> 
#include <netinet/tcp.h> 

/* ... */ 

tcp_info info; 
socklen_t tcp_info_length = sizeof info; 
ret = getsockopt(sock, SOL_TCP, TCP_INFO, &info, &tcp_info_length); 
printf("rtt: %us microseconds\n", info.tcpi_rtt);