如何修复 socat 以在 MacO 上正常工作?
How do I fix socat to work properly on MacOs?
我已经在 MacOs Mojave 上尝试了 socat 的 Homebrew 版本,但当 运行 使用:
时它无法工作
socat STDIO,raw TCP:localhost:40707
这给出了错误:
tcsetattr(7, TCSADRAIN, 0x10457ad30): Device not configured
没有 raw
它工作正常,但是我想要原始的,因为我希望能够在 socat 连接到的 shell 中操作文本对话框。
所以我下载了 socat 1.7.3.3 版本的源代码,经过一些小改动后,它就可以编译了。我本地编译的版本也有同样的问题。查看 socat 的源代码,它在 xio-termios.c:
int xiotermios_flush(int fd) {
if (_xiotermios_doit) {
if (Tcsetattr(fd, TCSADRAIN, &_xiotermios_data.termarg) < 0) {
Error3("tcsetattr(%d, TCSADRAIN, %p): %s",
fd, &_xiotermios_data.termarg, strerror(errno));
return -1;
}
_xiotermios_doit = false;
}
return 0;
}
我认为 tcsetattr 在 Mac 上的工作方式有点不同,因为相同的代码在 Linux 上工作正常。谁能帮我解决这个问题?
更新:我决定尝试创建一个 docker 容器 运行ning socat 作为解决方法。
FROM alpine:3.10.2
RUN apk add --no-cache socat
ENTRYPOINT ["socat"]
然后我 运行 容器有:
docker run --rm -ti socat STDIO,raw TCP:host.docker.internal:40707
不幸的是,这也没有用,只是给了我:
tcsetattr(5, TCSADRAIN, 0x55aadeb42b40): Not a tty
尽管如此,它似乎在没有 raw
的情况下也能正常工作。
回到以前的 Socat 版本 1.7.3.2 并让它工作,所以 Mac (1.7.3.3) 上的最新 socat 似乎有问题。
我已经在 MacOs Mojave 上尝试了 socat 的 Homebrew 版本,但当 运行 使用:
时它无法工作socat STDIO,raw TCP:localhost:40707
这给出了错误:
tcsetattr(7, TCSADRAIN, 0x10457ad30): Device not configured
没有 raw
它工作正常,但是我想要原始的,因为我希望能够在 socat 连接到的 shell 中操作文本对话框。
所以我下载了 socat 1.7.3.3 版本的源代码,经过一些小改动后,它就可以编译了。我本地编译的版本也有同样的问题。查看 socat 的源代码,它在 xio-termios.c:
int xiotermios_flush(int fd) {
if (_xiotermios_doit) {
if (Tcsetattr(fd, TCSADRAIN, &_xiotermios_data.termarg) < 0) {
Error3("tcsetattr(%d, TCSADRAIN, %p): %s",
fd, &_xiotermios_data.termarg, strerror(errno));
return -1;
}
_xiotermios_doit = false;
}
return 0;
}
我认为 tcsetattr 在 Mac 上的工作方式有点不同,因为相同的代码在 Linux 上工作正常。谁能帮我解决这个问题?
更新:我决定尝试创建一个 docker 容器 运行ning socat 作为解决方法。
FROM alpine:3.10.2
RUN apk add --no-cache socat
ENTRYPOINT ["socat"]
然后我 运行 容器有:
docker run --rm -ti socat STDIO,raw TCP:host.docker.internal:40707
不幸的是,这也没有用,只是给了我:
tcsetattr(5, TCSADRAIN, 0x55aadeb42b40): Not a tty
尽管如此,它似乎在没有 raw
的情况下也能正常工作。
回到以前的 Socat 版本 1.7.3.2 并让它工作,所以 Mac (1.7.3.3) 上的最新 socat 似乎有问题。