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()
的积压目的。     
已邀请:
listen()
的积压参数只是建议性的。 POSIX说:   backlog参数提供了一个提示   执行哪个   实施应用于限制   中的未完成连接数   套接字的侦听队列。 当前版本的Linux内核将其四舍五入到下一个最高权力为2,最小值为16.重要代码在reqsk_queue_alloc()中。     
不同的操作系统提供具有不同积压号码的不同数量的排队连接。 FreeBSD似乎是少数实际上具有1对1映射的操作系统之一。 (来源:http://books.google.com/books?id = tsSC4LpwGA0C& lpg = PA108& ots = Kq9FQogkTr& dq = berkeley%20listen%20backlog%20& pb = PA108#v = onepage; amp; q = bokeley%20listen %20backlog%20ack& f = false)     

要回复问题请先登录注册