net.unix.max_dgram_qlen 问题

Posted

技术标签:

【中文标题】net.unix.max_dgram_qlen 问题【英文标题】:net.unix.max_dgram_qlen questions 【发布时间】:2011-02-15 17:21:02 【问题描述】:

根据内核文档 net.unix.max_dgram_qlen sysctl 控制数据报套接字接收队列的最大长度(对于 AF_UNIX/AF_LOCAL 套接字)。在向该接收者发送呼叫开始阻塞之前,我总是可以发送比该值多 1 的值。有人知道为什么吗?

另外,有谁知道这是否曾经作为套接字选项实现过。 (有点像 SO_SNDBUF 对应 wmem_default 和 wmem_max)。这个thread 提到了这种可能性,但我找不到任何人在哪里做过。

【问题讨论】:

【参考方案1】:

1.,就是这样检查的:

static inline int unix_recvq_full(struct sock const *sk)                                        

    return skb_queue_len(&sk->sk_receive_queue) > sk->sk_max_ack_backlog;

这就是为什么您可以比您设置的值多发起一个连接。

2.,您传递给listen()的积压参数也用作ma​​x_ack_backlog。不过,没有其他方法可以影响它。

【讨论】:

你说的是数据报还是流套接字?我的问题涉及数据报。您是说 max_dgram_qlen (用于数据报)或 backlog 参数(用于流套接字)都映射到 max_ack_backlog 吗?我的问题不是如何检查它(这似乎很清楚),而是为什么检查它为什么?为什么 > 而不是 >=?很难相信没有理由,因为它违反直觉。 listen() 仅适用于流套接字,因此对于数据报,您唯一的选择是 sysctl 旋钮。您说支票违反直觉是对的,但我想这是出于历史原因。

以上是关于net.unix.max_dgram_qlen 问题的主要内容,如果未能解决你的问题,请参考以下文章

十问数据库:问来路,问现在,问未来

问一下list<>中的问题?

阿里面试喜欢问源码?头条喜欢问算法?腾讯喜欢问原理?我信了!

立问人脉问答小程序开发

麻烦问一下 关于SSH的有关问题,先谢谢了

问一个JAVA的小问题