【问题标题】:How to change TCP Congestion Control algorithm using setsockopt() call from C++ code如何使用 C++ 代码中的 setsockopt() 调用更改 TCP 拥塞控制算法
【发布时间】:2019-12-10 10:22:47
【问题描述】:

是否可以将TCP congestion control algorithmCubic 更改为Reno 或使用setsockopt 在Linux 中调用来自C++ 代码
我正在寻找这样做的示例代码。

【问题讨论】:

    标签: linux sockets tcp setsockopt congestion-control


    【解决方案1】:

    您可以使用TCP_CONGESTION 套接字选项来获取或将套接字的拥塞控制算法设置为/proc/sys/net/ipv4/tcp_allowed_congestion_control 中列出的值之一,或者如果您的进程具有特权,则设置为/proc/sys/net/ipv4/tcp_available_congestion_control 中的任何值。

    C 示例:

    #include <sys/socket.h>
    #include <netinet/in.h>
    #include <netinet/tcp.h>
    #include <stdio.h>
    #include <string.h>
    #include <unistd.h>
    
    int main(int argc, char **argv)
    {
        char buf[256];
        socklen_t len;
        int sock = socket(AF_INET, SOCK_STREAM, 0);
    
        if (sock == -1)
        {
            perror("socket");
            return -1;
        }
    
        len = sizeof(buf);
    
        if (getsockopt(sock, IPPROTO_TCP, TCP_CONGESTION, buf, &len) != 0)
        {
            perror("getsockopt");
            return -1;
        }
    
        printf("Current: %s\n", buf);
    
        strcpy(buf, "reno");
    
        len = strlen(buf);
    
        if (setsockopt(sock, IPPROTO_TCP, TCP_CONGESTION, buf, len) != 0)
        {
            perror("setsockopt");
            return -1;
        }
    
        len = sizeof(buf);
    
        if (getsockopt(sock, IPPROTO_TCP, TCP_CONGESTION, buf, &len) != 0)
        {
            perror("getsockopt");
            return -1;
        }
    
        printf("New: %s\n", buf);
    
        close(sock);
        return 0;
    }
    

    对我来说输出:

    Current: cubic
    New: reno
    

    【讨论】:

    • 但是,如何使用 C++ 代码中的 setsockopt 调用来更改它?这也是我的问题。我知道如果存在特权,它也可以更改命令行。
    • @Game_Of_Threads:我在 C 语言中添加了一个小示例来说明。如果不能自我解释,我可以添加一些 cmets。
    猜你喜欢
    • 2019-02-25
    • 1970-01-01
    • 1970-01-01
    • 2011-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多