socat
着信シリアルトラフィックをローカルUDPポート(macOS)に転送するために使用します。
socat OPEN:/dev/cu.usbmodem13203 UDP:localhost:12345
シリアルデバイスはストリームインタフェースで、UDPはパケットベースなので、明示的な内容はありません。正しいパケット境界を導入する場所と方法に答えてください。私のテストでは、各バイトは独自のUDPパケットに転送されます。たとえば、「XYZ」という文字列を送信すると、テストサーバーは次のように出力します。
Datagram: X
Datagram: Y
Datagram: Z
バイトシーケンスが複数のパケットに分割されるのはなぜですか?その背後にあるメカニズムは何ですか?この動作を制御する方法はありますか?
答え1
説明によると、socat
ファイル記述子に利用可能なデータがある限り、データは常にすぐに読み取られ、転送され、この動作は構成できません。
したがって、これはカーネルと(デバイス)ファイルの種類や基本ドライバによって異なり、それ自体を制御することはsocat
できません。