Як зберегти socat живим за допомогою опції keepalive


10

У мене є така команда socat, яка працює добре, але коли дані не передаються, вона вмирає рівно через 5 хвилин, і я не розумію, чому, як я встановив, відправляти 100 киепалів кожні 10 секунд після перших 10 секунд . З того, що я зрозумів на сторінці socat man, це повинно тримати його живим протягом 1000-х, що становить 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 Цей продукт включає програмне забезпечення, розроблене проектом OpenSSL для використання в наборі інструментів OpenSSL. (http://www.openssl.org/)
31.05.2017 08:53:01 socat [16065] I Цей продукт включає програмне забезпечення, написане Тімом Хадсоном (tjh@cryptsoft.com)
31.05.2017 08:53:01 socat [16065] Я встановлюю опцію "символічне посилання" на "/ tmp / lp1"
31.05.2017 08:53:01 socat [16065] Я відкриваю ({5}, {6}, {"/ dev / pts / 1"},) -> 0
31.05.2017 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-holdidle" на 10
31.05.2017 08:53:01 socat [16065] Я встановлюю опцію "tcp-holdintvl" на 10
2017/05/31 08:53:01 socat [16065] Я встановлюю опцію "tcp-holdcnt" на 100
31.05.2017 08:53:01 socat [16065] N відкриття з'єднання з AF = 2 192.168.0.5:9100
2017/05/31 08:53:01 socat [16065] Починаю з'єднувальну петлю
31.05.2017 08:53:01 socat [16065] I socket (2, 1, 6) -> 7
31.05.2017 08:53:01 socat [16065] N успішно з'єднано з локальної адреси AF = 2 192.168.0.4bljen6482
31.05.2017 08:53:01 socat [16065] Я вирішив і відкрив усі адреси шкарпеток
2017/05/31 08:53:01 socat [16065] N стартового циклу передачі даних з FD [5,5] та [7,7]
31.05.2017 08:58:01 socat [16065] N socket 2 (fd 7) знаходиться на EOF
31.05.2017 08:58:02 socat [16065] Я закінчив опитування (немає даних протягом 0,500000 секунд)
31.05.2017 08:58:02 socat [16065] Закриваю (5)
31.05.2017 08:58:02 socat [16065] Відключення (7, 2)
31.05.2017 08:58:02 socat [16065] N вихід із статусом 0

Деякі маршрутизатори NAT відключились через певний час замість активності
Ferrybig

Відповіді:


5

З сторінки 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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.