nc (netcat) hang, menunggu lebih banyak data, dalam mode UDP.

16

Saya mencoba mengirim string kecil ke statsd via nc di dalam blok baca:

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

Sayangnya, ketika dalam mode UDP, nc tampaknya ingin menunggu tanpa batas, meskipun saya telah menentukan -q 0, yang dikatakan halaman manual akan membuat program keluar segera setelah EOF.

Saya sudah mencoba melewatinya -w 1, tetapi jika data yang saya kirim masuk lebih dari satu baris per detik, data akan naik, dan saya kehilangan statistik waktu nyata saya (belum lagi mempertaruhkan semacam buffer overflow semacam).

Apakah mungkin untuk melakukan apa yang saya coba lakukan dengan netcat, atau apakah saya perlu menulis sesuatu dalam bahasa yang memiliki perpustakaan statsd?

bshacklett
sumber
meskipun itu tidak menyelesaikan masalah Anda, menambahkan -q 0 memecahkan masalah saya
Colin
Ini terjadi dalam mode TCP sekarang, yang membawa saya ke sini.
baitisj

Jawaban:

9

Saya akhirnya memperbaiki masalah dengan beralih ke socat:

while read line; do
    printf "folder.counter:value|1c" | socat -t 0 - UDP:$host:$port
done
bshacklett
sumber
Karena tidak ada input lain, dan ini menyelesaikan masalah saya, saya menandainya sebagai jawabannya.
bshacklett
Anda bisa menambahkan timeout 1 detik ke netcat (menambahkan argumen -w 1 mungkin berhasil).
parkamark
7

Anda dapat menetapkan 0 sebagai nilai batas waktu untuk -w, sehingga tidak akan menunggu sama sekali.

Dániel
sumber
Ini harus menjadi jawaban yang diterima.
Petrus K.
3
invalid wait-time 0
Tanpa
2

menambahkan opsi -v memecahkan masalah saya. Alasan saya tidak yakin.

Kousha
sumber
2

Saya memiliki masalah yang sama; dipecahkan dengan menggunakan -copsi:

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

jadi sesuatu seperti

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

Ya, tidak masuk akal untuk "menutup" koneksi udp - tapi itu akhirnya berhasil.

Jørn Christensen
sumber
Menambahkan -cmenyelesaikan masalah saya dengannetcat (The GNU Netcat) 0.7.1
Noah Sussman
0

Bagi kami, kami mengirim muatan nc dari satu mesin ke komputer lain melalui skrip python. Dalam python, ketika kami secara eksplisit menyandikan payload di 'UTF-8', itu hanya berfungsi.

pengguna1118473
sumber