C 如何以编程方式查找计算机的套接字等待队列大小?

C 如何以编程方式查找计算机的套接字等待队列大小?,c,bash,sockets,netcat,C,Bash,Sockets,Netcat,我想通过编程方式找到我的计算机的套接字等待队列的大小,即在被拒绝之前(当服务器侦听客户端时)可以放入队列中的套接字数 在服务器端,我只需创建一个套接字,绑定它,监听并进入无限循环,以等待客户端套接字。 然后我想这个小脚本可以帮助我找到队列大小: pids="" for i in {1..8}; do netcat localhost -w 3 19677 & pids+=" $!" done for p in $pids; do if wait $p

我想通过编程方式找到我的计算机的套接字等待队列的大小,即在被拒绝之前(当服务器侦听客户端时)可以放入队列中的套接字数

在服务器端,我只需创建一个套接字,绑定它,监听并进入无限循环,以等待客户端套接字。
然后我想这个小脚本可以帮助我找到队列大小:

pids=""
for i in {1..8}; do
     netcat localhost -w 3 19677 &
     pids+=" $!"
done

for p in $pids; do
        if wait $p; then
                echo "Process $p success"
       else
                echo "Process $p fail"
        fi
done
如果循环中有超过4个回合,那么我总是会得到一个超时异常(并且永远不会出现4个或更少),但是增加回合数并不总是导致更多错误(我不总是在6个回合中出现2个错误,在7个回合中出现3个错误,等等)。为什么?

此外,如果我直接在5个终端(
netcat localhost-w519677
)中启动netcat,我不会得到任何错误


我缺少什么?

没有用于此的API。您可能还记得为
listen()
提供的参数,但由于平台可以向上或向下调整它,因此对您没有多大好处


超过积压工作时会发生什么情况取决于平台。Windows将拒绝连接;其他平台将无所作为,这将导致重试和可能的连接超时。

没有用于此的API。您可能还记得为
listen()
提供的参数,但由于平台可以向上或向下调整它,因此对您没有多大好处


超过积压工作时会发生什么情况取决于平台。Windows将拒绝连接;其他平台将什么也不做,这将导致重试和可能的连接超时。

listen
有一个参数,你知道它的意思吗?我想你说的是backlog参数。我把这个论点设为1,但正如这里所解释的:它只是建议性的。(如果我已经很清楚了。)如果你不是在谈论积压工作,那又怎样?嗯,对不起,我不确定你的问题是否明白。我将backlog设置为1,但我仍然可以接受队列中的多个连接(至少4个)。除非我的脚本测试得很糟糕(可能)。您将backlog设置为至少一个,并且可以建立至少一个连接。这里没问题。
听着
有一个参数,你知道它是什么意思吗?我猜你在谈论backlog参数。我把这个论点设为1,但正如这里所解释的:它只是建议性的。(如果我已经很清楚了。)如果你不是在谈论积压工作,那又怎样?嗯,对不起,我不确定你的问题是否明白。我将backlog设置为1,但我仍然可以接受队列中的多个连接(至少4个)。除非我的脚本测试得很糟糕(可能)。您将backlog设置为至少一个,并且可以建立至少一个连接。这里没问题。这就是为什么我想测试等待队列上可以有多少个连接。为什么我测试它的方式不总是在同一个平台上显示相同的结果?我在Debian上运行脚本,并且有一个超时,所以为什么我不总是在相同的连接尝试次数下获得相同的连接超时次数?在服务器的无限循环中会发生什么?没有,只是(;;){}的
以避免程序结束。这就是为什么我想测试等待队列中可以连接多少个连接。为什么我测试它的方式不总是在同一个平台上显示相同的结果?我在Debian上运行脚本,并且有一个超时,所以为什么我不总是在相同的连接尝试次数下获得相同的连接超时次数?在服务器的无限循环中会发生什么?没有,只是(;;){}的
以避免节目结束。