Jak utrzymać życie przy pomocy opcji Keepalive

10

Mam tę komendę socat, która działa dobrze, ale gdy żadne dane nie są przesyłane, umiera dokładnie po 5 minutach i nie rozumiem dlaczego, ponieważ ustawiłem, aby wysyłać 100 podtrzymujących co 10 sekund po pierwszych 10 sekundach . Z tego, co rozumiałem na stronie man socat, powinno to utrzymywać ją przy życiu przez 1000, czyli 16 minut. Ponadto, jeśli spróbuję ustawić keepcnt na 200, otrzymam „setsockopt (7, 6, 6, {200}, 4): Nieprawidłowy argument”, ale nigdzie w Internecie nie mogę znaleźć maksymalnej wartości tego argumentu, więc myślę Muszę tu przegapić coś bardzo oczywistego. Eksperymentowanie z argumentami nigdy nie zmieniało wartości limitu czasu 5 mln. Ustawienie niższej wartości dla keepcnt i wyższych wartości keepintvl jest akceptowane, ale po prostu nie ma widocznego efektu.

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 Ten produkt zawiera oprogramowanie opracowane przez OpenSSL Project do użytku w zestawie narzędzi OpenSSL. (http://www.openssl.org/)
2017/05/31 08:53:01 socat [16065] I Ten produkt zawiera oprogramowanie napisane przez Tima Hudsona ([email protected])
2017/05/31 08:53:01 socat [16065] I ustawiam opcję „symbolic-link” na „/ 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 ​​to / dev / pts / 1
2017/05/31 08:53:01 socat [16065] Ustawiam opcję „so-keepalive” na 1
2017/05/31 08:53:01 socat [16065] Ustawiam opcję „tcp-keepidle” na 10
2017/05/31 08:53:01 socat [16065] Ustawiam opcję „tcp-keepintvl” na 10
2017/05/31 08:53:01 socat [16065] Ustawiam opcję „tcp-keepcnt” na 100
2017/05/31 08:53:01 socat [16065] N połączenie otwierające do AF = 2 192.168.0.5:9100
2017/05/31 08:53:01 socat [16065] Zaczynam pętlę połączenia
2017/05/31 08:53:01 socat [16065] I socket (2, 1, 6) -> 7
2017/05/31 08:53:01 socat [16065] N pomyślnie nawiązano połączenie z adresu lokalnego AF = 2 192.168.0.4:56482
2017/05/31 08:53:01 socat [16065] Rozwiązałem i otworzyłem wszystkie adresy skarpet
2017/05/31 08:53:01 socat [16065] N początkowa pętla transferu danych z FD [5,5] i [7,7]
2017/05/31 08:58:01 socat [16065] N gniazdo 2 (fd 7) jest na EOF
2017/05/31 08:58:02 socat [16065] Upłynął czas odpytywania (brak danych w ciągu 0,500000 sekund)
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 wyjście ze statusem 0
Marc Salvetti
źródło
Niektóre routery NAT rozłączyły się po określonym czasie zamiast aktywności
Ferrybig

Odpowiedzi:

5

Ze strony socjalnej dla -t<timeout>:

Gdy jeden kanał osiągnie EOF, część do zapisu drugiego kanału zostaje zamknięta.

Spróbuj dodać ignoreeofopcję.

Louis Waweru
źródło
0

Jeśli używasz polecenia podobnego SŁUCHAJ OPENSSL-LISTEN, TCP-LISTEN, itd, forkopcja będzie spin off połączeń do procesu potomnego, dzięki czemu można kontynuować socat odbioru.

Przykład:

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

Dzięki: https://unix.stackexchange.com/a/283289/15954

jtpereyda
źródło