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

2023-12-06

是否可以改变TCP拥塞控制算法 from Cubic to Reno或反之亦然使用套索克选择 call 来自 C++ 代码在Linux中?
我正在寻找这样做的示例代码。


您可以使用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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 C++ 代码中的 setsockopt() 调用更改 TCP 拥塞控制算法 的相关文章

随机推荐

  • 如何将参数从 JQuery 传递到 ASP.NET webmethod?

    我在下面编写了这个 jQuery ajax 方法 它调用 webmethod 除了作为 User 对象的参数具有空字段之外 调用发生得很好 当我调试时 我可以看到 firebug 中的值 但它们无法访问 webmethod 中的 User
  • C# 在其他线程上执行代码

    我的应用程序中的线程处理遇到一些问题 我有一个多线程客户端 服务器应用程序 我还使用 C MonoDevelop for Unity3d 不确定这对答案是否有任何影响 我将尝试解释我的问题出在哪里 Unity 在单线程上工作 所以如果我想实
  • 使用 NLTK 提取名词和动词

    我有 Django Rest 应用程序和一个模型任务 我对自然处理完全陌生 我想构建一个返回名词和动词列表的函数 它看起来像这样 api view GET def noun verb list request nouns verbs Lis
  • Groovy:Lombok @NoArgsConstructor 未创建默认构造函数

    我在用lombok 1 18 6在我的春季启动项目中 我有 NoArgsConstructor但仍然得到org springframework orm jpa JpaSystemException No default constructo
  • Android - Firestore/Firebase 实时数据库“.info/connected”返回错误的连接状态

    我在应用程序中使用 Firestore Beta 我想检查是否存在与 Firestore 数据库的有效在线连接 文档称 目前没有直接的方法来查询连接状态 但可以使用 Firebase 连接状态作为解决方法 代码片段也可以在文档的这一部分中找
  • AS/400:使用COMPUTE功能,不同字段定义结果不一致

    我在使用 AS 400 中的 COMPUTE 函数时遇到了一个神秘的问题 场景如下 01 WSAA AMOUNT A PIC S9 15 V9 02 COMP 3 01 WSAA AMOUNT B 01 PIC S9 16 V9 02 VA
  • 在 C++ 中创建文件夹

    我最近开始使用 C 工作 当我在执行代码时必须创建目录时遇到了这种情况 当我必须创建一个文件夹时 代码工作正常 但当我必须使用这个新创建的文件夹创建另一个文件夹时 代码会失败 假设 我在C 并想将我的文件存储在C A B 下面的代码使用mk
  • 使用 ncu (NsightComputeCli) 获取 nvprof 默认行为

    默认nvprof输出很棒 但是nvprof已被弃用 取而代之的是ncu 我怎样才能使ncu给我一个看起来更像的输出nvprof 最小工作示例 我有2个range以一种非常不理想的方式调用的函数 仅使用 1 个线程 比其他的需要更长的时间ra
  • 性能:子查询或连接

    我有一个关于子查询 连接另一个表的性能的小问题 INSERT INTO Original Person PID Name Surname SID SELECT ma PID new TBL Name ma Surname TBL SID F
  • 如何执行多个相继完成的 Alamofire 请求?

    我想执行多个 Alamofire 请求 但是 由于数据依赖性 新请求只能在前一个请求完成后才开始 我已经问过一个question一个更一般的异步请求示例 通过以下方法解决OperationQueue 然而 我并没有成功地用 Alamofir
  • fork()的执行顺序可以确定吗?

    我正在做教科书 操作系统概念第七版 的练习 我有点困惑如何fork 工作 据我了解 fork 创建一个与其父进程同时运行的子进程 但是 我们如何确切地知道哪个进程首先运行呢 我的意思是执行顺序 Problem使用以下命令编写 C 程序for
  • R CMD BATCH 或 Rscript 错误停止

    我不认为R CMD BATCH or Rscript应该在错误时停止 但我希望它停止 或类似的东西 作为一个例子 我有这个test R stop I really mean stop cat no I dont want this prin
  • 为 nth-child 和 nth-of-type 指定任意子级(无模式)列表

    所以我现在已经读了足够多的关于各种时髦的内容nth child and nth of type模式让第七个儿子的第七个儿子驾驶一艘宇宙飞船往返于冥王星 但我仍然没有找到一种方法来简单地以简洁的方式提供特定儿童的列表 它会像这样工作 td n
  • 判断SQLite数据库是否被锁定

    我读过关于如何检测 SQLite 数据库是否被锁定的其他答案 它建议使用sqlite3 busy handler sqlite3 busy timeout 我使用的是 Qt 它支持 SQLite 数据库 但这在这里并不重要 因为在我的应用程
  • MySQL注入查询

    我熟悉准备好的语句 并且我知道它们是防止 MySQL 注入的最佳实践 但我想知道这个 PHP MySQL 语句如何面临注入攻击的风险 result mysqli query db SELECT name FROM users WHERE i
  • Flash AS3 尝试获取外部 swf 时出现安全沙箱冲突

    嗨 我正在尝试从不同的服务器将 swf 文件加载到我的 Flash 应用程序 当我尝试将其加载到 flash IDE crl enter 上时 一切工作正常 但是当我将 swf 作为独立的 swf 文件运行或通过调试它时 我收到此错误 Se
  • 如何自定义像这样的按钮控件?

    我想制作一个像这样的自定义按钮控件 图像按钮可以 我是新用户 所以不能在这里发布图片 所以我上传了图片here 在尝试了一些教程后我现在有点绝望 任何建议都将受到高度赞赏 Thanks 更新于 08 10 2019 我很多年前就问过这个问题
  • 如何将xml元素绑定到对象成员变量中?

    我正在尝试使用 moxy 将 xml 解组为对象 下面是 xml 的示例
  • 创建有序计数器

    我一直在阅读如何super 作品 我碰到这个食谱演示了如何创建有序计数器 from collections import Counter OrderedDict class OrderedCounter Counter OrderedDic
  • 如何使用 C++ 代码中的 setsockopt() 调用更改 TCP 拥塞控制算法

    是否可以改变TCP拥塞控制算法 from Cubic to Reno或反之亦然使用套索克选择 call 来自 C 代码在Linux中 我正在寻找这样做的示例代码 您可以使用TCP CONGESTION用于获取或设置套接字的拥塞控制算法为下列