nc(netcat)がハングし、UDPモードでさらにデータを待機します。


16

私は読み取りブロック内のncを介してstatsdに小さな文字列を送信しようとしています:

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

残念なことに、UDPモードでは、ncが指定されたにもかかわらず、無期限に待機したいようです。-q 0マニュアルページでは、EOFの直後にプログラムが終了すると書かれています。

私はパスしようとしました-w 1が、送信するデータが1秒あたり1行以上で入ると、データがバッファリングし、リアルタイムの統計情報を失います(言うまでもなく、何らかのバッファオーバーフローのリスクがあります)。

私がnetcatでやろうとしていることを行うことは可能ですか、またはstatsdライブラリを持つ言語で何かを書く必要がありますか?


それは0 -q追加して、あなたが解決しなかったが、私の問題解決
コリン・

これは現在TCPモードで発生しているため、ここに来ました。
baitisj

回答:


9

に切り替えて問題を修正しましたsocat

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

他に入力がなく、これで問題が解決したので、それを答えとしてマークします。
-bshacklett

netcatに1秒のタイムアウトを追加することもできます(引数-w 1を追加するとおそらく機能します)。
パーカマーク

7

-wのタイムアウト値として0を指定できるため、まったく待機しません。


これは受け入れられた答えでなければなりません。
ペトルスK.

3
ゼロタイムアウトは許容できません。エラー:invalid wait-time 0
AstraSerg

2

-vオプションを追加すると、問題が解決しました。私にはわからない理由。


2

同じ問題がありました。-cオプションを使用して解決しました:

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

のようなもの

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

うん、udp-connectionを「閉じる」ことは本当に理にかなっていない-しかしそれはうまくいった。


追加する-cと私の問題を解決netcat (The GNU Netcat) 0.7.1
ノアサスマン

0

私たちにとっては、Pythonスクリプトを介して、あるマシンから別のマシンにncペイロードを送信していました。Pythonでは、ペイロードを「UTF-8」で明示的にエンコードすると、正常に機能しました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.