socat 支持 Unix 域套接字的 SOCK_SEQPACKET 吗?

Sam*_*ann 1 linux socat

考虑以下设置,其中一个socat实例通过管道将数据传输stdin到 unix 域套接字,另一个实例从 unix 域套接字读取该数据并将其写入stdout

客户:

(while true; do echo "hello"; sleep 1; done) | socat STDIN UNIX:test.sock
Run Code Online (Sandbox Code Playgroud)

服务器:

socat UNIX-LISTEN:test.sock STDOUT
Run Code Online (Sandbox Code Playgroud)

此设置按预期工作,服务器hellostdout1 秒的间隔进行打印。有没有办法socat使用SOCK_SEQPACKET套接字类型?

Sam*_*ann 5

经过进一步调查手册,我了解到这SOCK_SEQPACKET是由以下内容支持的socat

socktype= 将套接字的类型(指定为 socket() 或 socketpair() 调用的第二个参数)设置为 [int]。地址解析不受此选项的影响。在Linux下,1表示面向流的套接字,2表示数据报套接字,3表示原始套接字,5表示seqpacket(流保持数据包边界)。

客户:

(while true; do echo "hello"; sleep 1; done) | socat STDIN UNIX:test.sock,socktype=5
Run Code Online (Sandbox Code Playgroud)

服务器:

socat UNIX-LISTEN:test.sock,socktype=5 STDOUT
Run Code Online (Sandbox Code Playgroud)