nc (netcat), UDP modunda daha fazla veri bekliyor.


16

Okumak blok içinde nc üzerinden statsd küçük bir dize göndermeye çalışıyorum:

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

Maalesef, UDP modundayken, -q 0man sayfasının EOF'dan hemen sonra programın çıkmasını sağlayacağını belirtmiş olsam da, nc süresiz olarak beklemek istiyor gibi görünüyor .

Geçmeyi denedim -w 1, ancak gönderdiğim veriler saniyede birden fazla satırda geliyorsa, veri arabelleğe alınır ve gerçek zamanlı istatistiklerimi kaybederim (bir çeşit tampon taşması riskinden bahsetmiyorum).

Netcat ile yapmaya çalıştığım şeyi yapmak mümkün mü, yoksa statsd kütüphanesi olan bir dilde bir şeyler yazmam gerekecek mi?


seninkini çözemese de, -q 0 ekleyerek sorunumu çözdü
Colin

Bu şimdi TCP modunda oluyor, beni buraya getiren de buydu.
baitisj

Yanıtlar:


9

Ben geçerek sorunu gidermek sona erdi socat:

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

Başka bir girdi olmadığından ve bu sorunumu çözdüğünden, cevap olarak işaretliyorum.
bshacklett

Netcat'e 1 saniyelik bir zaman aşımı ekleyebilirdiniz (-w 1 değişkenleri muhtemelen işe yarardı).
parkamark

8

-W için zaman aşımı değeri olarak 0 belirtebilirsiniz, böylece hiç beklemez.


Bu kabul edilen cevap olmalı.
Petrus K.

3
Sıfır zaman aşımı kabul edilemez, hata:invalid wait-time 0
AstraSerg

@Astraserg hayır, sahip olduğunuz netcat / NC'ye bağlı olarak değil. BSD nc.
cde

2

-v seçeneği ekleyerek sorunumu çözdüm. Emin değilim.


2

Ben de aynı sorunu yaşadım; -cseçeneği kullanarak çözüldü :

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

yani bir şey

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

Evet, bir udp bağlantısını "kapatmak" gerçekten mantıklı değil - ama bu sonuçlandı.


Ekleyerek -csorunumu çözdünetcat (The GNU Netcat) 0.7.1
Noah Sussman

0

Bizim için bir makineden diğerine bir python betiği ile nc yükü gönderiyoruz. Python'da, 'UTF-8' içindeki yükü açıkça kodladığımızda, işe yaradı.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.