我想以编程方式查找计算机的套接字等待队列的大小,即在被拒绝之前可以放入队列的套接字的数量(当服务器正在侦听客户端时)。
在服务器端,我只是创建一个套接字,绑定它,监听并进入无限循环以等待客户端套接字。
然后我认为这个小脚本可以帮助我找到队列大小:
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,我不会收到任何错误。
我错过了什么?
答案 0 :(得分:0)
这没有API。你可以记住你提供给listen()
的论点,但是由于平台可以向上或向下调整它,它不会对你有好处。
超出积压时会发生什么情况取决于平台。 Windows将发出连接拒绝;其他平台什么都不做,这将导致重试和可能的连接超时。