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

时间:2016-06-06 08:12:34

标签: 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; then
                echo "Process $p success"
       else
                echo "Process $p fail"
        fi
done

如果循环中有超过4轮,那么我总是得到一个超时异常(并且从不为4或更少)但是增加轮数并不总是会导致更多错误(我并不总是得到2轮2次误差,7轮7次等)。为什么呢?

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

我错过了什么?

1 个答案:

答案 0 :(得分:0)

这没有API。你可以记住你提供给listen()的论点,但是由于平台可以向上或向下调整它,它不会对你有好处。

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