到着する各UDPパケットを印刷しようとしています。 xxd
を使用して、ASCIIコンテンツと生データ(16進数として)を出力したいと思います。
これまで私はsocat - udp4-listen:11255,reuseaddr,fork | xxd
を使用しました
この種の機能は機能しますが、xxd
は、出力の完全な行を出力できるようになるまで入力をバッファリングします。
socat
に、到着するudpパケットごとに新しいコマンドを実行させたいのですが。私はもう試した
socat -u udp4-listen:11255,reuseaddr,fork system:"/usr/bin/xxd - /tmp/foo"
パケットごとに新しいxxd
をフォークしますが(これは良いことです)、パケットを渡した後に入力を閉じるのではなく、実行を続けます。
UDPパケットを渡した後、フォークされたプロセスの入力をsocat
で閉じる方法はありますか?
socat -u udp4-recvfrom:11255,reuseaddr,fork exec:"/usr/bin/xxd - /tmp/foo"
それをします。違いは、udp4-recvfrom
の代わりにudp4-listen
を使用することです。前者はパケットごとの入力を処理するようですが、後者はパケットをストリームに連結します。