为什么改变 SO_RCVBUF 的值不起作用?

2024-04-10

我正在制作一个程序,它创建一个原始套接字以读取所有流量。在调用socket()和recvfrom()之间(最后一个在循环中从缓冲区中取出所有数据包)我等待了5秒。

当我运行该程序时,我使用 hping3 命令以“更快的模式”(以快速填充缓冲区)向我的程序发送大约 200 个数据包。一旦 5 秒过去,我的程序就会从缓冲区中提取大约 150 个数据包。

我尝试更改接收缓冲区的大小以获得更好的结果:

int a = 65535;
if ( (setsockopt(sockfd, 0, SO_RCVBUF, &a ,sizeof(int)) ) < 0 )
{
    fprintf(stderr, "Error setting sock opts..\n");
}

然而,无论“a”的值是 1 还是 10000000,似乎没有任何变化,我仍然从缓冲区中收到约 150 个数据包。

有什么问题?

编辑:“a”的值通过 a 进行验证getsockopt call.


如果操作系统似乎仍然无法正常工作,您也可能受到操作系统的限制。检查以下值:

/proc/sys/net/core/rmem_default
/proc/sys/net/core/rmem_max

如果正如您在示例中所说的那样是 TCP,而不是实际上的原始套接字,您还可以检查以下值:

/proc/sys/net/ipv4/tcp_mem

如果您对这些文件运行 cat,它们会向您显示当前设置。要永久更改它们,请使用 sysctl。在开始更改之前,最好记下这些设置。这是有关进行这些更改的精彩教程:http://fasterdata.es.net/fasterdata/host-tuning/linux/ http://fasterdata.es.net/fasterdata/host-tuning/linux/.

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

为什么改变 SO_RCVBUF 的值不起作用? 的相关文章

随机推荐

  • Azure:启动远程调试器失败

    我根据以下教程在 Windows Azure 中部署了一个 Web 角色 http weblogs asp net scottgu archive 2013 10 22 windows azure announcing release of
  • 如何在Java配置类中设置Spring weaver选项?

    我正在使用 Spring AOP 和提供的默认值DefaultContextLoadTimeWeaver 我希望能够编织持久化实体 并且我知道我必须设置编织器选项 来自控制台的警告 warning javax types are not b
  • Ruby on Rails Helper 方法 - HTML 显示为纯文本

    我的 Rails 应用程序有一个辅助方法 它返回一个字符串 其中包含 Google 网上论坛订阅表单的 HTML 代码 不幸的是 它以纯文本的形式出现在页面上 我怎样才能强制它呈现为 HTML 提前致谢 你的助手的结果需要在 Rails 3
  • 如何减慢或停止 XNA 中的按键速度

    我已经开始使用 XNA 框架编写游戏 并且遇到了一些我不知道如何正确解决的简单问题 我使用Texture2D 显示菜单并使用键盘 或游戏手柄 更改所选的菜单项 我的问题是当前用于在菜单项之间切换的功能太快了 我可能会单击向下按钮 它会向下移
  • 任意类型说明符上的 Defmethod?

    我想做的是 defgeneric fn x defmethod fn x integer 1 Positive integer defmethod fn x integer 1 Negative integer 我想要一个可以与任意类型说明
  • 在 SwiftUI 中,如何添加循环视频作为全屏背景图像?

    我有一个大约 10 秒长的视频 我想在我的一个 SwiftUI 视图中作为全屏背景图像循环播放 我怎样才能实现这个 第一个想法是与 Swift 合作import AVFoundation 但不确定这是否是正确的道路 您可以使用AV框架系列和
  • Chrome 在使用位置粘性/固定时会切断重影图像

    我正在尝试使用 HTML5 拖放position fixed从位于屏幕左侧固定位置的菜单中拖动元素 以下代码在 Safari 和 Firefox 中运行良好 但当我在 Chrome 中尝试时 滚动后 从拖放 API 生成的 幽灵 图像不可见
  • Leaflet.js:如何从地图中删除多个图层

    我正在使用 Leaflet js 制作地图 现在我想从地图中删除添加的图层 通过单击输入 按钮 所有选中的复选框将更改为未选中 并且所有相应的图层将从地图中删除 要从地图中删除图层 需要该图层的 ID 该 id 等于相应复选框的 id 这就
  • 如何使用 mysqli 准备好的语句绑定 N 个参数?

    在旧的 mysql 代码中 我有一个完美运行的查询 如下所示 questioncontent isset GET questioncontent GET questioncontent searchquestion questioncont
  • 如何检测用户何时成功完成php中文件的下载

    我有一个处理文件下载请求的 php 页面 我需要能够检测文件何时已成功下载 如何才能做到这一点 也许有一些方法可以检测该客户端 然后向服务器发送确认 Thanks 编辑 通过句柄 我的意思是该页面正在执行以下操作 file var www
  • Android - 应用程序安装在 SD 卡上时内部存储与外部存储

    我有一个可以下载大量内容的应用程序 用户之间有所不同 但可能是 200mb 到 1GB 或更多 目前 我将所有这些内容保存在外部存储上 因为这可能是空间最多的区域 例如 SD 卡 这在大多数情况下都可以正常工作 但在某些情况下这不一定是理想
  • Clojure 是否有命名私有函数的约定?

    当我在 Clojure 中定义私有函数时 我通常使用 前缀作为视觉指示符 表明该函数不能在我的命名空间之外使用 例如 defn name let formatter formatter yyyy MM dd HH mm ss SSSS fo
  • HTML5 push/replaceState 和 标签导致安全异常

    我有一个网站的测试版本 位于正常网站的子域中 例如 http test x com http test x com代替http x com http x com 我用标签将所有资源请求转换回原始域 在我实现 HTML5 Push repla
  • 对象或原始类型

    有人可以向我解释一下在 JAVA 中如何使用 Integer Boolean 等来代替它们的原始类型吗 我似乎无法理解他们提供的优势 它们似乎在处理空值时造成了不必要的问题 Thanks Boolean Integer Long 是对象 您
  • android ndk 未定义对方法的引用

    您好 很抱歉这篇长文章我正在尝试编译一些静态类 即 jsmn c json c 和 buf c 它们是我从下载的 jsmn json 库的一部分https github com alisdair jsmn example downloads
  • 如何使用spark-submit为Spark作业选择队列?

    有没有办法提供参数或设置来选择我希望运行 Spark submit 作业的队列 通过使用 queue 因此 火花提交作业的一个示例是 Spark submit master YARN conf Spark executor memory 4
  • Dash 数据表下载至 Excel

    我目前正在使用下面的脚本从我创建的破折号下载数据表 下载工作正常 但是当我在本地托管 Dash 并尝试通过另一个系统单击下载按钮时 文件正在主机上下载 而不是在用户计算机上下载 如果我的问题看起来很愚蠢 我深表歉意 因为我对 Dash 和
  • scala 中可以有命名常量吗?

    看起来 Java 中的注释需要常量 我想做 object ConfigStatics final val componentsToScan Array com example PropertySource ConfigStatics com
  • 由于 lambda 表达式,缩小失败

    当 ASP NET 捆绑程序尝试缩小以下脚本时 它会失败 Minification failed Returning unminified contents 164 59 60 run time error JS1195 Expected
  • 为什么改变 SO_RCVBUF 的值不起作用?

    我正在制作一个程序 它创建一个原始套接字以读取所有流量 在调用socket 和recvfrom 之间 最后一个在循环中从缓冲区中取出所有数据包 我等待了5秒 当我运行该程序时 我使用 hping3 命令以 更快的模式 以快速填充缓冲区 向我