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

我试图发送一个小stringstatsd通过读取块内的NC:

while read line; do printf "folder.counter:value|1c" | nc -q 0 -u $host $port done 

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

我尝试过传递-w 1 ,但是如果我发送的数据以每秒多于一行的速度进入,则数据缓冲起来,并且我失去了我的实时统计信息(更不用说冒着某种缓冲区溢出的风险)。

是否有可能做我想用netcat做什么,或者我需要写一些语言,它有一个statsd库?

我最终通过切换到socat来解决问题:

 while read line; do printf "folder.counter:value|1c" | socat -t 0 - UDP:$host:$port done 

你可以指定0作为-w的超时值,所以它不会等待。

添加-v选项解决了我的问题。 我不确定的原因。

知道这是一个旧的职位,但只是想我会无论如何贡献。 我有同样的问题; 使用-c选项解决它:

 -c, --close close connection on EOF from stdin 

所以有点像

 while read line; do printf "folder.counter:value|1c" | nc -cu $host $port done 

是的,“closures”一个udp连接并没有什么意义,但是最终还是起作用了。