重传时TCP_INFO tcp_rtti为0

时间:2019-03-15 06:34:44

标签: c networking tcp linux-kernel network-programming

我想测量客户端和服务器的RTT。

所以我参考https://linuxgazette.net/136/pfeiffer.html并编写一个演示程序。

#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/tcp.h>
#include <netinet/in.h>
#include <stdio.h>

int main() {
    int fd = socket(AF_INET, SOCK_STREAM, 0);

    struct sockaddr_in addr;
    socklen_t socklen = sizeof(addr);
    addr.sin_family = AF_INET;
    addr.sin_port = htons(80);
    addr.sin_addr.s_addr = inet_addr("8.8.8.8");

    if (connect(fd, (struct sockaddr*)&addr, socklen) < 0) {
        printf("connect error: %m");
        return -1;
    }


    struct tcp_info info;
    socklen_t length = sizeof(info);
    if (getsockopt(fd, SOL_TCP, TCP_INFO, &info, &length) == -1) {
        printf("getsockopt error: %m");
        return -1;
    }

    printf("connect success, rtt: %u, total retrans: %u\n", info.tcpi_rtt, info.tcpi_total_retrans);

    return 0;
}

在重传之前,它工作正常:rtt0

$ for (( i = 0; i < 10; i++ )); do ./a.out ; done
connect success, rtt: 10203, total retrans: 0
connect success, rtt: 0, total retrans: 1
connect success, rtt: 10396, total retrans: 0
connect success, rtt: 10066, total retrans: 0
connect success, rtt: 9692, total retrans: 0
connect success, rtt: 10244, total retrans: 0
connect success, rtt: 9877, total retrans: 0
connect success, rtt: 3275, total retrans: 0
connect success, rtt: 10083, total retrans: 0
connect success, rtt: 9207, total retrans: 0

我对内核了解不多,那么内核中发生了什么?

我不能用tcp_info.tcpi_rtt测量RTT吗?

0 个答案:

没有答案