Unix域套接字(AF_UNIX)的数据报队列长度默认大小是多少?它是否可配置?

8

我知道可以通过使用"cat /proc/sys/net/unix/max_dgram_qlen"命令来找到数据报队列长度的最大值。

我想知道如何找到在启动时设置的默认值(例如发送缓冲区大小的/proc/sys/net/core/wmem_default)。

是否可以增加max_dgram_qlen的值?其上限是多少?

我的内核版本是2.6.27.7。我对Unix域套接字编程(AF_UNIX)很陌生。

非常感谢任何意见/解决方案!

2个回答

8
之前的回答和评论没有理解到问题是关于数据报中的最大队列长度(max_dram_qlen),而不是字节。 操作系统为这两个尺寸提供了设置。您可以使用以下命令设置max_dgram_qlen:
sysctl net.unix.max_dgram_qlen=128

您可能需要使用sudo运行,并且根据您的shell,您还可能需要在max_dgram_qlen=128周围加上双引号。

此外,请参见单个数据包在域套接字上传输的实际限制是多少?


1

man unix(7):

SO_SNDBUF套接字选项对UNIX域套接字确实有影响,但SO_RCVBUF选项则没有。对于数据报套接字,SO_SNDBUF值将强加一个上限,用于传出数据报的大小。此限制是由选项值加倍(请参阅socket(7))减去用于开销的32个字节计算得出的。


感谢Maxim的回复。我同意SO_SNDBUF决定了传出数据报大小的上限。但是,我想知道首先将所有传出数据报排队的队列的默认值是多少。 - user3184348
1
@user3184348 在你的问题中已经给出了,/proc/sys/net/core/wmem_default。 - nos
@user3184348 你可以使用 getsockopt() 函数编程地查找套接字缓冲区大小。 - Maxim Egorushkin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接