nc (netcat) bị treo, chờ thêm dữ liệu, ở chế độ UDP.


16

Tôi đang cố gắng gửi một chuỗi nhỏ tới statsd qua nc bên trong khối đọc:

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

Thật không may, khi ở chế độ UDP, nc dường như muốn chờ đợi vô thời hạn, mặc dù tôi đã chỉ định -q 0, trang man nói sẽ khiến chương trình thoát ngay lập tức sau EOF.

Tôi đã thử chuyển -w 1, nhưng nếu dữ liệu tôi gửi đến nhiều hơn một dòng mỗi giây, dữ liệu sẽ tăng lên và tôi mất các số liệu thống kê theo thời gian thực của mình (chưa kể đến việc có nguy cơ tràn bộ đệm nào đó).

Có thể làm những gì tôi đang cố gắng làm với netcat không, hoặc tôi sẽ cần phải viết một cái gì đó bằng ngôn ngữ có thư viện thống kê?


mặc dù nó không giải quyết được vấn đề của bạn, nhưng thêm -q 0 đã giải quyết vấn đề của tôi
Colin

Điều này xảy ra trong chế độ TCP bây giờ, đó là những gì đã đưa tôi đến đây.
baitisj

Câu trả lời:


9

Tôi đã kết thúc việc khắc phục sự cố bằng cách chuyển sang socat:

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

Vì không có đầu vào nào khác và điều này đã giải quyết vấn đề của tôi, tôi đánh dấu nó là câu trả lời.
bshacklett

Bạn có thể đã thêm thời gian chờ 1 giây vào netcat (thêm các đối số -w 1 có thể đã hoạt động).
parkamark

7

Bạn có thể chỉ định 0 là giá trị thời gian chờ thành -w, vì vậy nó sẽ không chờ gì cả.


Đây phải là câu trả lời được chấp nhận.
Petrus K.

3
Không có thời gian chờ là không thể chấp nhận, lỗi:invalid wait-time 0
AstraSerg

2

thêm tùy chọn -v đã giải quyết vấn đề của tôi. Lý do tôi không chắc chắn.


2

Tôi đã có vấn đề tương tự; giải quyết nó bằng cách sử dụng -ctùy chọn:

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

một cái gì đó như

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

Vâng, không thực sự có ý nghĩa để "đóng" một kết nối udp - nhưng điều đó đã kết thúc hoạt động.


Thêm -cgiải quyết vấn đề của tôi vớinetcat (The GNU Netcat) 0.7.1
Noah Sussman

0

Đối với chúng tôi, đó là chúng tôi đã gửi một tải trọng nc từ máy này sang máy khác thông qua một tập lệnh python. Trong python, khi chúng tôi mã hóa rõ ràng tải trọng trong 'UTF-8', nó chỉ hoạt động.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.