我需要在套接字中設置或獲取RTT(AF_INET
,SOCK_RAW
, IPPROTO_TCP
)的方式。如何在Linux套接字編程中設置/獲取套接字RTT?
接下來我需要做什麼來在套接字編程中控制這樣的RTT?換句話說,如何找到這樣的RTT參數?
我需要在套接字中設置或獲取RTT(AF_INET
,SOCK_RAW
, IPPROTO_TCP
)的方式。如何在Linux套接字編程中設置/獲取套接字RTT?
接下來我需要做什麼來在套接字編程中控制這樣的RTT?換句話說,如何找到這樣的RTT參數?
爲了測量往返時間(RTT)編寫一個簡單的客戶機 - 服務器應用程序,其中一個節點:
clock_gettime()
write()
在將消息發送到所述另一節點(已打開)套接字read()
clock_gettime()
RTT是兩次之間的差異。
POSIX.1-2008將'gettimeofday(2)'標記爲過時。應該使用'clock_gettime(2)'(或'time(2)')。 –
對。固定。謝謝。 – Claudio
在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);
有針對該API中沒有的功能。只需要向另一端發送一條消息,讓另一端發回消息並計時。不那麼難。 –
請問[tcp-timestamp](http://ithitman.blogspot.in/2013/02/tcp-timestamp-demystified.html)選項有幫助嗎? –
它沒有設置,它由TCP測量。 – EJP