gpt4 book ai didi

linux - 如何使用 C++ 代码中的 setsockopt() 调用更改 TCP 拥塞控制算法

转载 作者:行者123 更新时间:2023-12-03 09:58:49 33 4
gpt4 key购买 nike

是否可以更改TCP congestion control algorithmCubicReno,反之亦然,使用 setsockopt在 Linux 中调用从 C++ 代码
我正在寻找这样做的示例代码。

最佳答案

您可以使用 TCP_CONGESTION socket 选项,用于获取或设置套接字的拥塞控制算法为 /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

关于linux - 如何使用 C++ 代码中的 setsockopt() 调用更改 TCP 拥塞控制算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59265004/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com