nc (netcat) zawiesza się, czekając na więcej danych, w trybie UDP.

16

Próbuję wysłać mały ciąg do statystyki przez nc wewnątrz bloku odczytu:

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

Niestety, gdy jest w trybie UDP, nc wydaje się chcieć czekać w nieskończoność, mimo że to określiłem -q 0, co według strony podręcznika spowoduje, że program wyjdzie natychmiast po EOF.

Próbowałem przekazać -w 1, ale jeśli dane, które wysyłam, przychodzą z więcej niż jedną linią na sekundę, bufory danych się zwiększają i tracę statystyki w czasie rzeczywistym (nie wspominając o ryzyku przepełnienia bufora).

Czy można zrobić to, co próbuję zrobić z netcat, czy też muszę napisać coś w języku, który ma bibliotekę statystyk?

bshacklett
źródło
chociaż to nie rozwiązało twojego problemu, dodanie -q 0 rozwiązało mój problem
Colin
To dzieje się teraz w trybie TCP, co mnie tu sprowadziło.
baitisj

Odpowiedzi:

9

Naprawiłem problem, przechodząc do socat:

while read line; do
    printf "folder.counter:value|1c" | socat -t 0 - UDP:$host:$port
done
bshacklett
źródło
Ponieważ nie było innych danych wejściowych, co rozwiązało mój problem, zaznaczam to jako odpowiedź.
bshacklett
Mogłeś dodać 1 sekundę do netcat (dodanie argumentów -w 1 prawdopodobnie by zadziałało).
parkamark
7

Możesz podać 0 jako wartość limitu czasu dla -w, aby w ogóle nie czekał.

Dániel
źródło
To powinna być zaakceptowana odpowiedź.
Petrus K.
3
invalid wait-time 0
Limit
2

dodanie opcji -v rozwiązało mój problem. Nie jestem pewien.

Kousha
źródło
2

Miałem ten sam problem; rozwiązał to za pomocą -copcji:

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

więc coś w stylu

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

Tak, naprawdę nie ma sensu „zamykać” połączenia udp - ale to zadziałało.

Jørn Christensen
źródło
Dodanie -crozwiązało mój problem znetcat (The GNU Netcat) 0.7.1
Noah Sussman
0

Dla nas było to, że wysyłaliśmy ładunek nc z jednej maszyny na drugą za pomocą skryptu python. W pythonie, kiedy jawnie zakodowaliśmy ładunek w „UTF-8”, po prostu działało.

użytkownik1118473
źródło