nc (netcat) висить, чекаючи більше даних, в режимі UDP.


16

Я намагаюся надіслати невеликий рядок до statsd через nc всередині блоку читання:

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

На жаль, коли в режимі UDP, nc, схоже, хоче чекати нескінченно, хоч я і вказав -q 0, для якої сторінки man говорить, що програма вийде з програми відразу після EOF.

Я намагався пройти -w 1, але якщо дані, які я надсилаю, надходять більше, ніж один рядок в секунду, дані буферуються, і я втрачаю статистику в реальному часі (не кажучи вже про ризик переповнення буфера якоїсь форми).

Чи можна робити те, що я намагаюся зробити з netcat, або мені потрібно буде написати щось мовою, на якій є бібліотека statsd?


хоча це не вирішило вашу, додавши -q 0 вирішив мою проблему
Колін

Це відбувається в режимі TCP зараз, саме це мене і привело сюди.
baitisj

Відповіді:


9

Я вирішив проблему, перейшовши на socat:

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

Оскільки іншого вводу не було, і це вирішило мою проблему, я позначаю це як відповідь.
bshacklett

Ви могли б додати timecat до 1 секунди (додавання аргументів -w 1, мабуть, спрацювало б).
parkamark

7

Ви можете вказати 0 як значення тайм-ауту до -w, тому воно зовсім не чекатиме.


Це має бути прийнятою відповіддю.
Петрус К.

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-з'єднання - але це закінчилось.


Додавання -cвирішило мою проблему зnetcat (The GNU Netcat) 0.7.1
Ной Суссман

0

Для нас було те, що ми передавали nc корисного навантаження з однієї машини на іншу за допомогою сценарію python. У python, коли ми явно кодували корисне навантаження у "UTF-8", він просто працював.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.