Как настроить socat для правильной работы на MacO? - PullRequest
1 голос
/ 04 октября 2019

Я попробовал Homekrew версию socat на MacOs Mojave, и она не работает при запуске с:

socat STDIO,raw TCP:localhost:40707

Это выдает ошибку:

tcsetattr(7, TCSADRAIN, 0x10457ad30): Device not configured

Без raw все работает нормально, однако я хочу использовать raw, потому что я хочу иметь возможность манипулировать текстовыми диалогами в оболочке, к которой подключен socat.

Итак, я загрузил исходный код 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. Может кто-нибудь помочь мне исправить это?

ОБНОВЛЕНИЕ: Я решил попытаться создать докер-контейнер с запущенным 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.

1 Ответ

0 голосов
/ 14 октября 2019

Вернулся к предыдущей версии Socat 1.7.3.2 и запустил ее, поэтому, похоже, что-то не так с последней моделью socat на Mac (1.7.3.3).

...