Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux net.unix.max_dgram_qlen问题_Linux_Sockets_Network Programming - Fatal编程技术网

Linux net.unix.max_dgram_qlen问题

Linux net.unix.max_dgram_qlen问题,linux,sockets,network-programming,Linux,Sockets,Network Programming,根据内核文档net.unix.max_dgram_qlen sysctl控制数据报套接字接收队列的最大长度(适用于AF_unix/AF_本地套接字)。在向该接收器发送呼叫开始阻塞之前,我始终可以发送比该值多1个的呼叫。有人知道为什么吗 还有,有人知道这是否曾经作为套接字选项实现过吗。(有点像SO_SNDBUF对应于wmem_default和wmem_max)。这提到了这种可能性,但我找不到有人在哪里做过。1.,就是这样检查的: static inline int unix_recvq_full(

根据内核文档net.unix.max_dgram_qlen sysctl控制数据报套接字接收队列的最大长度(适用于AF_unix/AF_本地套接字)。在向该接收器发送呼叫开始阻塞之前,我始终可以发送比该值多1个的呼叫。有人知道为什么吗


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

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()的backlog参数也用作max\u ack\u backlog。但是,没有其他方法可以影响它。

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()的backlog参数也用作max\u ack\u backlog。但是,没有其他方法可以影响它。

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