2015-06-22 76 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);