Ankündigung

Einklappen
Keine Ankündigung bisher.

- √ - WG Scripts debuggen mit Sockets und Socat

Einklappen
Dieses Thema ist geschlossen.
X
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    [wiregate] - √ - WG Scripts debuggen mit Sockets und Socat

    Ich habe für Onkyo-Receiver das bestehene Script umgeschrieben, daß es nun socat benutzt.
    Es funktioniert grundsätzlich, allerdings gestaltet sich das Debuggen schwierig, da nach Abbruch des Scripts / socat man in Zustände gelangt, wo es nicht mehr funktioniert:
    Je nachdem kann sich das Script nicht mehr verbinden, es wird nichts mehr vom Receiver empfangen, socat beendet sich, ...
    Sicher aber langwierig ist ein Neustart des WG - auf Dauer nervt das ...

    Ich verwende folgenden Code
    Code:
    if (!$socket[$socknum]) { # socket erstellen
        $socket[$socknum] = IO::Socket::INET->new( Proto => "tcp",
                      PeerPort  => 60127, PeerAddr  => localhost, ReuseAddr => 1
        )
        or return ("open of $recv_ip : $recv_port failed: $!");
    
        $plugin_socket_subscribe{$socket[$socknum]} = $plugname; # subscribe plugin
        return "opened Socket $socknum";
    } 
    ...
    syswrite($socket[$socknum], $mycommand);
    und folgenden socat Aufruf:
    Code:
    socat -v -d -d -d tcp-listen:60127,bind=localhost,reuseaddr,cr tcp-connect:192.168.188.27:60128
    1. Wenn ich nun socat neustarten möchte/muß, müßte man das im Script entsprechend behandeln? Z.B. Zurücksetzen von $socket[$socknum], erneutes plugin_socket_subscribe, wiregated.pl neustarten, ...?
    2. Wenn mein Script abstürtzt, wie muß ich das handhaben?
    3. Kann man den Status der Verbindung im Script abfragen und entsprechend behandeln?
    4. Gibt es sinnvolle Optionen, die man socat noch mitgeben sollte? (Ich bin da nicht fit)
    5. Gibt es vielleicht ein Referenzbeispiel, was ich noch nicht gefunden habe?

    Grüße, Manuel

    #2
    Es gab noch ein paar andere Seiteneffekte. Nachdem diese beseitigt sind, ist es nicht schwer:
    Zurücksetzen erfolgt durch socat neu starten, dann wiregated.pl neustarten.
    Wenn socat abstürzt und das Script trotzdem auf das socket schreibt, gibt es einen Timeout und wiregated startet sich neu.

    Trotzdem würde ich mir wünschen, daß wiregated.pl für Sockets eine API anbietet. Dokumentation wäre auch nicht schlecht ...

    Kommentar


      #3
      Guiter Vorschalg: Es ist Open Source und jeder darf gerne mitarbeiten.

      Also wer macht sich ran an die API und an die Doku?

      lg

      Stefan

      Kommentar


        #4
        Hallo Stefan,

        da das WG mit "Logiken sowie Erweiterungen der Funktionalität werden mit Plugins realisiert." beworben wird, würde ich eher erwarten, daß Elabnet die Infrastruktur dafür zur Verfügung stellt und pflegt. (Open-Source-"Problematik" und Geldverdien-Müssen-Problem mal außen vorgelassen.)
        Sockets sind nun nicht mehr wirklich exotisch. Es gibt unglaublich viele Scripts fürs WG und das wird für viele auch ein Kaufgrund sein. Aber dabei ist leider sehr viel Wildwuchs, weil jeder es so macht, wie er es woanders abgeguckt hat.

        Grüße, Manuel

        Kommentar

        Lädt...
        X