相关疑难解决方法(0)

listen()忽略了积压参数?

我有以下问题:

我有 sockfd = socket(AF_INET, SOCK_STREAM, 0)

在我设置并绑定套接字后(让我们说sockfd.sin_port = htons(666)),我立即执行:

listen(sockfd, 3);

sleep(50); // for test purposes
Run Code Online (Sandbox Code Playgroud)

我正在睡觉50秒来测试积压参数,这似乎被忽略了,因为我可以在端口666上建立连接*超过3次.

*:我的意思是我从客户端发送的每个第N个SYN(n> 3)获得一个syn/ack并放置在侦听队列中,而不是被丢弃.可能有什么不对?我已经阅读了listen(2)和tcp(7)的手册页,发现:

使用Linux 2.2更改了TCP套接字上的backlog参数的行为.现在它指定了等待接受的完全建立的套接字的队列长度,而不是未完成的连接请求的数量.可以使用/ proc/sys/net/ipv4/tcp_max_syn_backlog设置不完整套接字的队列的最大长度.启用syncookies时,没有逻辑最大长度,并忽略此设置.有关更多信息,请参阅tcp(7).

,但即使有sysctl -w sys.net.ipv4.tcp_max_syn_backlog=2sysctl -w net.ipv4.tcp_syncookies=0,我仍然得到相同的结果!我必须遗漏一些东西或完全误解了listen()积压的目的.

c sockets linux listen

26
推荐指数
2
解决办法
8409
查看次数

标签 统计

c ×1

linux ×1

listen ×1

sockets ×1