Как сохранить socat в живых используя опцию keepalive

1761
Marc Salvetti

У меня есть эта команда socat, которая работает нормально, но когда данные не передаются, она умирает ровно через 5 минут, и я не понимаю, почему, поскольку я настроил ее для отправки 100 сообщений активности каждые 10 секунд после первых 10 секунд, Из того, что я понял из справочной страницы socat, это должно поддерживать его в течение тысяч секунд, что составляет 16 минут. Кроме того, если я пытаюсь установить для keepcnt значение 200, я получаю «setsockopt (7, 6, 6,, 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 Этот продукт включает программное обеспечение, разработанное проектом OpenSSL для использования в OpenSSL Toolkit. (Http://www.openssl.org/) 2017/05/31 08:53:01 socat [16065] I Этот продукт включает программное обеспечение, написанное Тимом Хадсоном (tjh@cryptsoft.com) 2017/05/31 08:53:01 socat [16065] Я установил опцию «символическая ссылка» на «/ tmp / lp1» 2017/05/31 08:53:01 socat [16065] I openpty (,, {"/ 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 сокат [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] Я решил и открыл все адреса носков 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] Время опроса истекло (нет данных в течение 0.500000 секунд) 2017/05/31 08:58:02 socat [16065] Я закрываю (5) 2017/05/31 08:58:02 socat [16065] I shutdown (7, 2) 2017/05/31 08:58:02 socat [16065] N на выходе со статусом 0 
10
Некоторые маршрутизаторы NAT отключаются через определенное время вместо активности Ferrybig 7 лет назад 0

2 ответа на вопрос

3
Louis

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

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

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

0
jtpereyda

Если вы используете команду 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