Synapse TCP/IP Socket Keep Alive aktivieren/senden

Rund um die LCL und andere Komponenten
Antworten
NoCee
Beiträge: 170
Registriert: Do 3. Mär 2011, 21:34
OS, Lazarus, FPC: WinXp/7/10 Opensuse13.2/Leap15.3 (L 2.2.0 FPC 3.2.2 )
CPU-Target: Intel 32/64Bit, ARM9
Wohnort: Ulm

Synapse TCP/IP Socket Keep Alive aktivieren/senden

Beitrag von NoCee »

Hallo zusammen,

wir haben aktuell ein Projekt im Betrieb, bei dem neue VLans und damit IP Adressen für Maschinen
vergeben werden. Jetzt haben wir das Problem, daß mehrere PCs (Opensuse) und kleine Arm9 (Linux Busybox) Systeme ihre
Verbindung nach ungefähr 1h von der Firewall gekappt bekommen wenn kein Traffic stattfindet.
Ich hatte hier mal einen Thread bei dem ich für LNet nach Keep Alive gefragt hatte, konnte mir aber damals keiner helfen.
Jetzt hab ich mir überlegt das ich da was ich programmiert habe auf Synapse aufzusetzen weil das mehr kann. Ungeschickter weise
finde ich bei Synapse auch nichts mit Keep Alive. Ich kann an der Gegenseite nichts ändern und kann deshalb
kein Telegramm auf Anwenderebene senden sondern muß das original "Keep Alive" vom OS verwenden.

Kann mir einer helfen wie ich bei einem ganz einfachen TCP/IP Socket das Keep Alive aktiviert bekomme?
Synapse (oder LNet)

Bester Dank im Voraus
NoCee

Benutzeravatar
theo
Beiträge: 10500
Registriert: Mo 11. Sep 2006, 19:01

Re: Synapse TCP/IP Socket Keep Alive aktivieren/senden

Beitrag von theo »

Kannst du nicht einfach alle 30 Minuten mal ein Ping oder so etwas machen, damit du nicht raus fliegst?

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6217
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Synapse TCP/IP Socket Keep Alive aktivieren/senden

Beitrag von af0815 »

Ich verwende sowas und Pinge damit das Standardgateway von Zeit zu Zeit an. Dadurch fliege ich nirgends raus. Die Timeouts muss man halt anpassen, das Standardgateway sollte ja immer unmittelbar vorhanden sein.

Code: Alles auswählen

// synapse wird benötigt (OPM)
uses
  pingsend;
  
 .......
 const
  MyMaxPingCnt = 5;

var
  MaxPingCnt : integer;   //böse unitglobale variable, wird mit MyMaxPingCnt gefüllt 
 .........
  
procedure PingServerSilent(const HostName: String; const AAppl: TApplication;
  var IsOk: Boolean);
var
  cnt: Integer;
  aPing: TPINGSend;
begin
  aPing:= TPINGSend.Create;
  try
    aPing.Timeout:=500;
    cnt := MaxPingCnt;
    aPing.Sock.SocksTimeout:= 500;
    while not aPing.Ping(HostName) and (cnt > 0) do begin
      dec(cnt);
      sleep(10);
      if (AAppl) <> nil then
        AAppl.ProcessMessages;
    end;
    IsOk := (cnt > 0);
  finally
    aPing.Free;
  end;
end;
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

NoCee
Beiträge: 170
Registriert: Do 3. Mär 2011, 21:34
OS, Lazarus, FPC: WinXp/7/10 Opensuse13.2/Leap15.3 (L 2.2.0 FPC 3.2.2 )
CPU-Target: Intel 32/64Bit, ARM9
Wohnort: Ulm

Re: Synapse TCP/IP Socket Keep Alive aktivieren/senden

Beitrag von NoCee »

Das mit dem ping hab ich auch schon überlegt,
leider haut das nicht hin weil die Firewall jede Verbindung separat speichert.
Ein ping von diesen PCs aber über einen anderen Datenkanal funktioniert nicht.
Der ping natürlich schon.
Das macht die Firewall und nicht das Gateway, zumindest in diesem Fall.

Ich hab mich mittlerweile durchs Netz gelesen und festgestellt, daß das vom OS Windows wie auch Linux untersützt wird,
aber per default auf false steht. Wenn die Software das nutzen will, muß diese selber
das Keep Alive für den Socket einschalten. Aber wie?
Für C hab ich was gefunden, hilft mir aber mal gar nicht.

Was mir da noch einfallen würde, wäre da stündlich Telegrammüll zu schicken oder die Verbindung gezielt ab und wieder auf zu bauen.
Beides müllt aber das Logfile des Gegenüber voll wenn das übers Wochenende so läuft.
Da werd ich dann mal drauf aufmerksam gemacht, daß da was nicht stimmt.

Dann hab ich noch ein Projekt entdeckt das ich mal genauer anschauen werden.
https://sourceforge.net/projects/libkeepalive/
Macht laut Beschreibung genau das was ich brauchen könnte und soll relativ einfach sein.
Das Prinzip dieses Projekts funktioniert aber laut Beschreibung nicht immer. Vielleicht hab ich ja Glück.
Oder es meldet sich noch einer der Synapse ein Keep Alive entlocken kann. Im http Part von Synapse ist da ja auch was drin.

Euch aber Danke für die Unterstützung

Gruß
NoCee

Antworten