考虑以下设置,其中一个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)
此设置按预期工作,服务器hello以stdout1 秒的间隔进行打印。有没有办法socat使用SOCK_SEQPACKET套接字类型?
经过进一步调查手册页,我了解到这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)
| 归档时间: |
|
| 查看次数: |
746 次 |
| 最近记录: |