我有这个运行良好的 socat 命令,但是当没有数据传输时,它会在 5 分钟后死机,我不明白为什么,因为我已将其设置为在前 10 秒后每 10 秒发送 100 个 keepalive。根据我对 socat 手册页的理解,这应该可以让它保持活动状态 1000 秒,也就是 16 分钟。此外,如果我尝试将 keepcnt 设置为 200,我会得到“setsockopt(7, 6, 6, {200}, 4): 无效参数”,但在互联网上我找不到该参数的最大值,所以我想我一定是错过了一些非常明显的东西。对参数进行更多试验从未改变 5mn 的超时值。设置较低的 keepcnt 值和较高的 keepintvl 值是可以接受的,但没有明显的效果。
socat -d -d -d -v pty,link=/tmp/lp1 tcp:192.168.0.5:9100,reuseaddr,keepalive,keepidle=10,keepintvl=10,keepcnt=100
2017/05/31 08:53:01 socat[16065] I 本产品包含由 OpenSSL 项目开发的用于 OpenSSL 工具包的软件。(http://www.openssl.org/) 2017/05/31 08:53:01 socat[16065] I 本产品包含由 Tim Hudson 编写的软件([电子邮件保护]) 2017/05/31 08:53:01 socat[16065] 我将选项“符号链接”设置为“/tmp/lp1” 2017/05/31 08:53:01 socat[16065] 我 openpty({5}, {6}, {"/dev/pts/1"},,) -> 0 2017/05/31 08:53:01 socat[16065] N PTY 是 /dev/pts/1 2017/05/31 08:53:01 socat[16065] 我将选项“so-keepalive”设置为 1 2017/05/31 08:53:01 socat[16065] 我将选项“tcp-keepidle”设置为 10 2017/05/31 08:53:01 socat[16065] 我将选项“tcp-keepintvl”设置为 10 2017/05/31 08:53:01 socat[16065] 我将选项“tcp-keepcnt”设置为 100 2017/05/31 08:53:01 socat[16065] N 打开与 AF=2 192.168.0.5:9100 的连接 2017/05/31 08:53:01 socat[16065] 我开始连接循环 2017/05/31 08:53:01 socat[16065] I 套接字(2, 1, 6) -> 7 2017/05/31 08:53:01 socat[16065] N 从本地地址 AF=2 192.168.0.4:56482 成功连接 2017/05/31 08:53:01 socat[16065] 我解析并打开了所有sock地址 2017/05/31 08:53:01 socat[16065] N 使用 FD [5,5] 和 [7,7] 启动数据传输循环 2017/05/31 08:58:01 socat[16065] N 套接字 2 (fd 7) 位于 EOF 2017/05/31 08:58:02 socat[16065] I轮询超时(0.500000秒内无数据) 2017/05/31 08:58:02 socat[16065] 我关闭(5) 2017/05/31 08:58:02 socat[16065] 我关闭(7, 2) 2017/05/31 08:58:02 socat[16065] N 退出,状态为 0
答案1
答案2
OPENSSL-LISTEN
如果您使用诸如、TCP-LISTEN
等LISTEN 命令,该fork
选项将会分离与子进程的连接,以便 socat 可以继续接收。
例子:
socat - OPENSSL-LISTEN:443,method=TLS1.2,verify=0,cert=cert.pem,key=key.pem,fork