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 page บอกว่าจะทำให้โปรแกรมออกจาก 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

คุณสามารถเพิ่มการหมดเวลา 1 วินาทีใน netcat (การเพิ่มอาร์กิวเมนต์ -w 1 น่าจะใช้ได้)
parkamark

7

คุณสามารถระบุ 0 เป็นค่าการหมดเวลาเป็น -w ดังนั้นมันจะไม่รอเลย


นี่ควรเป็นคำตอบที่ยอมรับได้
Petrus K.

3
การหมดเวลาเป็นศูนย์ไม่สามารถยอมรับได้ข้อผิดพลาด:invalid wait-time 0
AstraSerg


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
Noah Sussman

0

สำหรับเรามันเป็นสิ่งที่เรากำลังส่งน้ำหนักบรรทุก nc จากเครื่องหนึ่งไปยังอีกเครื่องผ่านสคริปต์ไพ ธ อน ในไพ ธ อนเมื่อเราเข้ารหัสส่วนของข้อมูลใน 'UTF-8' อย่างชัดเจนมันแค่ทำงาน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.