socatはパケット境界をどこに/どのように挿入しますか?

socatはパケット境界をどこに/どのように挿入しますか?

socat着信シリアルトラフィックをローカルUDPポート(macOS)に転送するために使用します。

socat OPEN:/dev/cu.usbmodem13203 UDP:localhost:12345

シリアルデバイスはストリームインタフェースで、UDPはパケットベースなので、明示的な内容はありません。正しいパケット境界を導入する場所と方法に答えてください。私のテストでは、各バイトは独自のUDPパケットに転送されます。たとえば、「XYZ」という文字列を送信すると、テストサーバーは次のように出力します。

Datagram: X
Datagram: Y
Datagram: Z

バイトシーケンスが複数のパケットに分割されるのはなぜですか?その背後にあるメカニズムは何ですか?この動作を制御する方法はありますか?

答え1

説明によると、socatファイル記述子に利用可能なデータがある限り、データは常にすぐに読み取られ、転送され、この動作は構成できません。

したがって、これはカーネルと(デバイス)ファイルの種類や基本ドライバによって異なり、それ自体を制御することはsocatできません。

関連情報