Linux 中 AF_UNIX 数据报消息的最大大小是多少?

2024-05-09

目前我已达到 130688 字节的硬限制。如果我尝试在一条消息中发送更大的内容,我会收到一条消息ENOBUFS error.

我已经检查过net.core.rmem_default, net.core.wmem_default, net.core.rmem_max, net.core.wmem_max, and net.unix.max_dgram_qlensysctl 选项并增加了它们,但它们没有效果,因为这些处理的是总缓冲区大小而不是消息大小。

我也设置了SO_SNDBUF and SO_RCVBUF套接字选项,但这有与上面相同的问题。无论如何,默认套接字缓冲区大小是根据默认套接字选项设置的。

我查看了内核源代码ENOBUFS在套接字堆栈中返回,但我不清楚它来自哪里。似乎返回此错误的唯一地方与无法分配内存有关。

最大尺寸实际上是 130688 吗?如果不是的话,可以在不重新编译内核的情况下更改它吗?


AF_UNIX SOCK_DATAGRAM/SOCK_SEQPACKET 数据报需要连续的内存。连续的物理内存很难找到,并且分配失败,在内核日志上记录类似的内容:

udgc: page allocation failure. order:7, mode:0x44d0
[...snip...]
DMA: 185*4kB 69*8kB 34*16kB 27*32kB 11*64kB 1*128kB 1*256kB 0*512kB 0*1024kB 0*2048kB 0*4096kB = 3788kB
Normal: 13*4kB 6*8kB 100*16kB 62*32kB 24*64kB 10*128kB 0*256kB 1*512kB 0*1024kB 0*2048kB 0*4096kB = 7012kB
[...snip...]

unix_dgram_sendmsg() calls sock_alloc_send_skb() lxr1 http://lxr.free-electrons.com/source/net/unix/af_unix.c?v=2.6.37#L1448,这称为sock_alloc_send_pskb() with data_len= 0 和header_len= 数据报的大小lxr2 http://lxr.free-electrons.com/source/net/core/sock.c?v=2.6.37#L1578. sock_alloc_send_pskb()分配header_len来自“正常”skbuff 缓冲区空间,以及data_len从分散/聚集页面lxr3 http://lxr.free-electrons.com/source/net/core/sock.c?v=2.6.37#L1517。因此,看起来 AF_UNIX 套接字在当前的 Linux 上不支持分散/聚集。

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

Linux 中 AF_UNIX 数据报消息的最大大小是多少? 的相关文章

  • CakePHP 多站点(如 WPMU + 域映射)...可能吗?

    所以我刚刚开始使用 CakePHP 想知道是否可以执行以下操作 一次安装 Cake 并使用超级管理员登录 然后 管理员有权访问指定的 子站点 并能够在这些子站点上创建 编辑内容和用户 最后 能够将域名 不是子域 而是唯一域 映射到路由 所以
  • 建立 TCP 连接边界的正确方法

    我的问题是关于如何正确处理使用 tcp 连接接收的数据 事实上 通过建立 tcp 连接 创建了一个流 假设我想发送一条有开头和结尾的消息 由于数据在流中流动而没有指定任何边界 我如何识别消息的开始和结束 我想在消息的开头和结尾处放置一些特殊
  • 确定我可以向文件句柄写入多少内容;将数据从一个 FH 复制到另一个 FH

    如何确定是否可以将给定数量的字节写入文件句柄 实际上是套接字 或者 如何 取消读取 我从其他文件句柄读取的数据 我想要类似的东西 n how much can I write w handle n read r handle buf n a
  • 使用ssl和socket的python客户端身份验证

    我有一个 python 服务器 需要客户端使用证书进行身份验证 我如何制作一个客户端脚本 使用客户端证书由 python 中的服务器使用 ssl 和套接字模块进行身份验证 有没有仅使用套接字和 ssl 而不扭曲的示例 from OpenSS
  • 在退出脚本之前等待后台进程完成

    在退出脚本 TCL Bash 之前 如何确保所有后台进程已完成执行 我正在考虑将所有后台进程 pid 写入 pid 文件 然后最后 pgrep pidfile 以查看在退出之前是否有任何进程仍在运行 有一些更简单的方法可以做到这一点吗 TC
  • Mac + Ruby:无法访问 Socket 的 ioctl?怎么修?

    一天中的好时光 红宝石代码 def hw address iface sock Socket new Socket AF INET Socket SOCK DGRAM 0 buf iface pack a16h16 sock ioctl S
  • 如何以最短的停机时间移交 TCP 侦听套接字?

    虽然这个问题被标记为 EventMachine 任何语言的通用 BSD 套接字解决方案也非常受欢迎 一些背景 我有一个应用程序正在侦听 TCP 套接字 它通过常规的 System V 风格的 init 脚本启动和关闭 我的问题是它需要一些时
  • Gearman,php 扩展问题:使用终端在 .. 中找不到类“GearmanWorker”,但可以在浏览器上使用

    我最近在 ubuntu 10 04 上安装了 gearman 并安装了它的 pecl 扩展 现在 当我在浏览器中运行一个 php 文件时 其中包含 client new GearmanWorker die var Dump client I
  • 检查 Unix 消息队列是否为空

    谁能告诉我如何检查消息队列中是否有消息 消息队列是在基于Linux的操作系统中用C语言实现的 我只是想检查在特定时间消息队列中是否有消息 只需使用以下命令即可检查消息数量 如果有 msgctl 函数 并在返回时检查 msqid ds 结构
  • Java,如何管理线程读取socket(websocket)?

    我有一个 WebSocket 服务器 我的服务器创建一个新线程来处理新连接 该线程一直处于活动状态 直到 websocket 中断 我的问题 对于 1 000 000 个连接 我需要 1 000 000 个线程 我如何通过一个线程处理多个
  • Python 如何找到 sys.prefix(或 sys.base_prefix)的值?

    锡上写着什么 我已经解开了如何解开的谜团sys prefix使用虚拟环境时设置 Python 寻找pyvenv cfg file 1 https www python org dev peps pep 0405 specification
  • 直接向pbs脚本传递参数

    有没有办法在提交作业之前直接将参数传递给 pbs 脚本 我需要循环遍历由不同数字表示的文件列表 并应用脚本来分析每个文件 我能想到的最好的办法如下 bin sh for i 1 i lt 10 i do export FILENUM i q
  • 如何在gnuplot中将字符串转换为数字

    有没有办法将表示数字 以科学格式 的字符串转换为 gnuplot 中的数字 IE stringnumber 1 0e0 number myconvert stringnumber plot 1 1 number 我可能使用 shell 命令
  • Nginx 和 Flask-socketio Websockets:存在但没有消息传递?

    我在让 Nginx 与 Python Flask socketio 库 基于 gevent 很好地配合时遇到了一些麻烦 目前 由于我们正在积极开发 我正在尝试让 Nginx 充当代理 对于发送页面 我可以通过直接运行flask socket
  • 如何知道哪个本地应用程序连接到我的套接字(Windows)

    我有一个绑定到某个 TCP 端口的 Windows 服务 该端口用于我的应用程序之间的 IPC 有没有一种编程 WinAPI WinSocket 等 方法可以知道哪个应用程序连接到我的端口 即在我的 Windows 服务中 我想获取连接到我
  • uwsgi协议比http协议快吗?

    我正在尝试部署 django 应用程序的各种设置 我的第一选择是使用带有 mod wsgi 的简单 apache 服务器 我之前已经实现了该服务器供私人使用 由于当前的部署是供公众使用的 因此我正在考虑各种选择 根据网上提供的信息 使用 n
  • Unix 中的访问时间是多少

    我想知道访问时间是多少 我在网上搜索但得到了相同的定义 读 被改变 我知道与touch我们可以改变它 谁能用一个例子来解释一下它是如何改变的 有没有办法在unix中获取创建日期 时间 stat结构 The stat 2 结构跟踪所有文件日期
  • Heroku:无法解析服务器的 DNS

    我买了一个myapp app带有 OVH 的域 我还购买了 Heroku hobby dyno 以便为我的 api 有一个安全的子域 https www server myapp app代替https www myapp heroku ap
  • UDP接收和发送Matlab

    我目前正在努力从外部设备接收数据包 然后将数据发送到另一个设备 我有一个工作 Simulink 模型 但我不知道如何在 Matlab 中对其进行编码 Matlab 中 UDP 接收块的参数如下图所示UDP 接收参数 https i stac
  • mongodb 正在运行吗?

    我已经在我的 Unix 服务器上安装了 Mongodb 和 PHP 驱动程序 我的问题是如何判断 Mongodb 是否正在运行 是否有一个简单的命令行查询来检查状态 如果我从外壳程序启动一次 如果我退出外壳程序 它会继续运行 情况似乎并非如

随机推荐