listen()忽略了积压参数?
我有以下问题:
我有
sockfd = socket(AF_INET, SOCK_STREAM, 0)
在我设置并绑定套接字后(假设用sockfd.sin_port = htons(666)
),我立即执行:
listen(sockfd, 3);
sleep(50); // for test purposes
我正在睡觉50秒来测试积压参数,这似乎被忽略了,因为我可以在端口666上建立连接*超过3次。
*:我的意思是我从客户端发送的每个第N个SYN(n> 3)获得一个syn / ack并放置在侦听队列中,而不是被丢弃。可能有什么不对?我已经阅读了listen(2)和tcp(7)的手册页,发现:
使用Linux 2.2更改了TCP套接字上的backlog参数的行为。
现在它指定了等待接受的完全建立的套接字的队列长度,而不是未完成的连接请求的数量。不完整套接字的队列的最大长度可以
使用
的/ proc / SYS /网/的IPv4 / tcp_max_syn_backlog。
当启用syncookies时
没有逻辑最大长度和这个
设置被忽略。请参阅tcp(7)
更多
信息。
,但即使使用sysctl -w sys.net.ipv4.tcp_max_syn_backlog=2
和sysctl -w net.ipv4.tcp_syncookies=0
,我仍然得到相同的结果!我必须遗漏某些东西或完全误解listen()
的积压目的。
没有找到相关结果
已邀请:
2 个回复
扇献隙
的积压参数只是建议性的。 POSIX说: backlog参数提供了一个提示 执行哪个 实施应用于限制 中的未完成连接数 套接字的侦听队列。 当前版本的Linux内核将其四舍五入到下一个最高权力为2,最小值为16.重要代码在reqsk_queue_alloc()中。
混侩闯空坷