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其自身控制。

相关内容