Назад | Перейти на главную страницу

Конец строки после достижения лимита чтения в socat

Мы хотели использовать сокат чтобы сделать доступным процесс, основанный на строке:

socat SYSTEM:"echo \$\$;sed -u /^%/s/foo/bar/" \
  TCP-L:1234,fork,reuseaddr,readbytes=21,bind=localhost

Это работает, но только до тех пор, пока readbytes предел достигнут, потому что последняя «строка» обрезается и левая сторона («СИСТЕМА») не получает новую строку до следующей строки. Например:

$ echo %foo | socat - tcp:localhost:1234
13047
%bar
$ echo foo w/o ^% | socat - tcp:localhost:1234
foo w/o ^%
$ echo %foo, here is a too long line | socat - tcp:localhost:1234
$ echo %foo | socat - tcp:localhost:1234
%bar, here is a too l%foo

В echo \$\$ там, чтобы продемонстрировать, что socat запускает левую часть только один раз и поддерживает ее работу для нескольких клиентов. Вот что нам нужно. Но есть ли способ, например, передать новую строку в левую часть, когда правая сторона была обрезана из-за readbytes?

Обновление 2019-03-15 00:05 UTC:

Возможно, кто-то захочет добавить ,pty,rawer в левую сторону, однако, это не помогает в случае, когда readbytes предел достигнут.

socat - это 1.7.3.1, работает на Debian 9, Linux 4.9.144.