我有一个工具可以将数据流出tcp端口,并且我想在脚本中使用标准工具来确定流是否可用。脚本来测试流媒体服务器的流量吗?
手动使用ncat
,如果数据流不可用,它会立即退出。
这里是我最初的bash脚本:
#!/bin/bash
ncat somehost 1234 >/dev/null &
pid=$!
sleep 1
if [ -d /proc/$pid/ ]; then
kill -KILL $pid
echo "It's alive, ALIVE\!"
# Launch clients
else
echo "He's dead, Jim."
# Perform resurrection
fi
它的工作原理,但我不知道是否有做到这一点,不依赖于作业控制或PROCFS甚至NCAT简单的或更好的办法。我还想知道在超时过期之前发送了多少数据。
而且,是的,在bash ncat host port
可以替换cat </dev/tcp/host/port
,但我也想避免bash-isms(所以它可以在busybox下工作)。
另一种方法是使用由wc
ncat
计数行/字符输出,因为它仅输出一条线和退出时,如果连接无法进行。但是我不能永远等待流如果终止,所以我需要使用类似timeout
这样的东西,它在尝试访问命令的输出时有其自身的复杂性。
是否有一种“简单”的方法,最小的依赖关系?
或者我应该写一个简单的工具吗?如果与主机/端口建立连接,它将返回读取的字节数,否则返回一个负的errno,并支持等待时间和协议规范(tcp/udp)。返回值为0意味着已建立连接,但在等待时间过期之前没有数据到达(知道一件好事)。
或者也许补丁ncat
做到以上?
可以将'ncat'输出重定向到'head -n 3',而不是'timeout',这会导致3行(指示活动流)后出现管道错误。不幸的是,'ncat'对'SIGPIPE'的响应很差,并且它是一个PITA来处理'bash'中的信号错误。 – BobC