nc (netcat) 挂起,等待更多数据,UDP 模式。

bsh*_*ett 16 shell netcat statsd

我正在尝试通过读取块内的 nc 向 statsd 发送一个小字符串:

while read line; do
    printf "folder.counter:value|1c" | nc -q 0 -u $host $port
done
Run Code Online (Sandbox Code Playgroud)

不幸的是,在 UDP 模式下, nc 似乎想无限期地等待,即使我已经指定了-q 0,手册页说这将使程序在 EOF 后立即退出。

我试过 pass -w 1,但是如果我发送的数据每秒超过一行,数据就会缓冲起来,我会丢失实时统计数据(更不用说冒某种缓冲区溢出的风险了)。

是否可以用 netcat 做我想要做的事情,还是我需要用具有 statsd 库的语言编写一些东西?

bsh*_*ett 9

我最终通过切换到解决了这个问题socat

while read line; do
    printf "folder.counter:value|1c" | socat -t 0 - UDP:$host:$port
done
Run Code Online (Sandbox Code Playgroud)


小智 9

您可以将 0 指定为 -w 的超时值,因此它根本不会等待。

  • 零超时是不可接受的,错误:`invalid wait-time 0` (5认同)