如何在linux socket编程中设置/获取socket RTT?

如何在linux socket编程中设置/获取socket RTT?,linux,sockets,tcp-ip,Linux,Sockets,Tcp Ip,我需要以套接字(AF\u INET,SOCK\u RAW,IPPROTO\u TCP)的方式设置或获取RTT 在socket编程中,我接下来需要做什么来控制这样的RTT?换句话说,如何找到这样的RTT参数?要测量往返时间(RTT),请编写一个简单的客户端-服务器应用程序,其中一个节点: 使用clock\u gettime()读取当前时间 使用(已打开)套接字上的write()向另一个节点发送消息 使用read() 使用clock\u gettime()读取当前时间 RTT是这两个时间段之间的差异

我需要以套接字(
AF\u INET
SOCK\u RAW
IPPROTO\u TCP
)的方式设置或获取RTT


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

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

  • 使用
    clock\u gettime()读取当前时间
  • 使用(已打开)套接字上的
    write()
    向另一个节点发送消息
  • 使用
    read()
  • 使用
    clock\u gettime()读取当前时间

  • RTT是这两个时间段之间的差异。

    在Linux上,您可以通过使用
    TCP\u INFO
    调用
    getsockopt()
    来获得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);
    
    #包括
    #包括
    #包括
    /* ... */
    tcp_信息;
    socklen\u t tcp\u info\u length=sizeof info;
    ret=getsockopt(sock、SOL\u TCP、TCP\u INFO、&INFO和TCP\u INFO长度);
    printf(“rtt:%us microseconds\n”,info.tcpi\u rtt);
    
    API中没有用于此的函数。只需向另一端发送一条消息,让另一端将其发回,并计时。没那么难。选项会有帮助吗?它不是通过TCP.POSIX.1-2008将
    gettimeofday(2)
    标记为过时而设置的,而是经过测量的<代码>时钟时间(2)
    应改为使用(或
    时间(2)
    )。对。固定的。非常感谢。