10

У меня есть эта команда socat, которая работает нормально, но когда данные не передаются, она умирает ровно через 5 минут, и я не понимаю, почему, поскольку я настроил ее для отправки 100 сообщений активности каждые 10 секунд после первых 10 секунд , Из того, что я понял из справочной страницы socat, это должно поддерживать его в течение тысяч секунд, что составляет 16 минут. Кроме того, если я пытаюсь установить для keepcnt значение 200, я получаю «setsockopt (7, 6, 6, {200}, 4): неверный аргумент», но нигде в интернете я не могу найти максимальное значение этого аргумента, поэтому я думаю, Я, должно быть, здесь упускаю что-то очень очевидное. Экспериментируя больше с аргументами, никогда не менял значение тайм-аута 5мн. Установка более низкого значения для 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 This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit. (http://www.openssl.org/)
2017/05/31 08:53:01 socat[16065] I This product includes software written by Tim Hudson (tjh@cryptsoft.com)
2017/05/31 08:53:01 socat[16065] I setting option "symbolic-link" to "/tmp/lp1"
2017/05/31 08:53:01 socat[16065] I openpty({5}, {6}, {"/dev/pts/1"},,) -> 0
2017/05/31 08:53:01 socat[16065] N PTY is /dev/pts/1
2017/05/31 08:53:01 socat[16065] I setting option "so-keepalive" to 1
2017/05/31 08:53:01 socat[16065] I setting option "tcp-keepidle" to 10
2017/05/31 08:53:01 socat[16065] I setting option "tcp-keepintvl" to 10
2017/05/31 08:53:01 socat[16065] I setting option "tcp-keepcnt" to 100
2017/05/31 08:53:01 socat[16065] N opening connection to AF=2 192.168.0.5:9100
2017/05/31 08:53:01 socat[16065] I starting connect loop
2017/05/31 08:53:01 socat[16065] I socket(2, 1, 6) -> 7
2017/05/31 08:53:01 socat[16065] N successfully connected from local address AF=2 192.168.0.4:56482
2017/05/31 08:53:01 socat[16065] I resolved and opened all sock addresses
2017/05/31 08:53:01 socat[16065] N starting data transfer loop with FDs [5,5] and [7,7]
2017/05/31 08:58:01 socat[16065] N socket 2 (fd 7) is at EOF
2017/05/31 08:58:02 socat[16065] I poll timed out (no data within 0.500000 seconds)
2017/05/31 08:58:02 socat[16065] I close(5)
2017/05/31 08:58:02 socat[16065] I shutdown(7, 2)
2017/05/31 08:58:02 socat[16065] N exiting with status 0

2 ответа2

4

Из справочной страницы socat для -t<timeout>:

Когда один канал достиг EOF, часть записи другого канала отключается.

Попробуйте добавить опцию ignoreeof .

0

Если вы используете команду LISTEN, такую как OPENSSL-LISTEN , TCP-LISTEN и т.д., Опция fork соединения с дочерним процессом, так что socat может продолжать получать.

Пример:

socat - OPENSSL-LISTEN:443,method=TLS1.2,verify=0,cert=cert.pem,key=key.pem,fork

Спасибо: https://unix.stackexchange.com/a/283289/15954

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .