Ankündigung

Einklappen
Keine Ankündigung bisher.

LBS 19000278 - UDP (Multicast)

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    LBS 19000278 - UDP (Multicast)

    Hallo CentOS / php Freaks,

    ich habe einen UDP Empfangsbaustein (278) hochgeladen. Wie dort schon beschrieben klappt leider der UDP Multicast-Empfang nicht. Ich bin nun schon 3 Nächte mehr oder weniger komplett drangesessen und nicht weitergekommen. Praktisch der gleiche Code funktioniert unter Windows mit XXAMP (der interface name muss in Windows anders sein).
    PHP-Code:
    $socket socket_create(AF_INETSOCK_DGRAMSOL_UDP);
    if (!
    $socket) return;
    socket_set_option($socketSOL_SOCKETSO_BROADCAST1);
    $gruppe=array("group" => '234.6.6.6',"interface" => 0);
    socket_set_option($socketIPPROTO_IPMCAST_JOIN_GROUP$gruppe);
        echo 
    'Fehler? Option'.socket_last_error($socket);
    if (!
    socket_bind($socket0'9050')) return;
    echo 
    'multicast';
    echo 
    'gestartet';
    $data 0;
    $sendip 0;
    $sendport 0;
    while(
    $data == 0) {    
        echo 
    'lesen';
        
    socket_recvfrom($socket$data500$sendip$sendport);
        echo 
    'gelesen';
        echo 
    $data;
        
    usleep(1000*10);        //CPU-Last verteilen (die Länge der Pause sollte je nach Bedarf angepasst werden - je länger, desto ressourcenschonender)
        
    return;};
    socket_close($socket); 
    Liegt es an meiner VM (eventuell kann jemand den Baustein auf seiner Hardware testen, ich habe MulticastTestTool.NET Lite verwendet)?
    Liegt es an CentOS?
    Liegt es einfach an meinem Unvermögen?
    Bin auf dem Gebiet erst mit EDOMI als völliger Laie eingestiegen.

    Winni

    Achja:
    echo 2 > /proc/sys/net/ipv4/conf/eth0/rp_filter
    und ändern von /etc/sysctl.conf
    net.ipv4.conf.default.rp_filter = 2
    mit
    service network restart
    hab ich schon ausprobiert
    Zuletzt geändert von Winni; 31.03.2016, 21:17.

    #2
    Mein Wissensstand: Die PHP-Version, die mit EDOMI "geliefert" wird kann kein UDP-Multicast... Ich habe auch schon diverse Experimente hinter mir
    EDOMI - Intelligente Steuerung und Visualisierung KNX-basierter Elektro-Installationen (http://www.edomi.de)

    Kommentar


      #3
      Hi,

      kann prinzipiell mindestens mal zwei Gruende haben: fehlerhaftes Netzwerk oder Probleme mit der Virtualisierung.
      Versuch mal eine multicast Route fuer dein Ethernet-IF anzulegen, zB so:
      route add -net 224.0.0.0/8 eth0
      Wenn das geholfen hat, kannst Du die Aenderungen permanent gestalten, indem Du ein File mit Namen /etc/sysconfig/network-scripts/route-eth0 erstellst und da rein schreibst:
      224.0.0.0/4 dev eth0
      (Eigentlich sollte das aber nicht notwendig sein - Du kannst mit "netstat -gn" schauen ob und wenn ja wo und wie welche Routen liegen)

      Wenn das nicht hilft, dann kann es uU an der NIC-Emulation im Hypervisor liegen (VMware zB hatte da mal (oder hat noch immer?) Probleme) - da kann es helfen, in der CFG der VM den Typ des Netzwerk-Adapters umzustellen.

      HTH :: Michael

      Kommentar


        #4
        Hier nachzulesen: http://php.net/manual/en/function.socket-get-option.php

        Sprich: Erst ab PHP 5.4 verfügbar...
        MCAST_JOIN_SOURCE_GROUP Receive packets destined to a specific multicast group whose source address matches a specific value. (added in PHP 5.4)
        EDOMI - Intelligente Steuerung und Visualisierung KNX-basierter Elektro-Installationen (http://www.edomi.de)

        Kommentar


          #5
          Ich nehme alles zurueck und behaupte das Gegenteil

          Kommentar


            #6
            Ich habe einige Nächte (und Tage) mit Multicasting verbracht - und irgendwann habe ich glatt mal einen Blick in die PHP-Doku geworfen... Hätte ich vielleicht schon früher drauf kommen können...
            EDOMI - Intelligente Steuerung und Visualisierung KNX-basierter Elektro-Installationen (http://www.edomi.de)

            Kommentar


              #7
              Zitat von gaert Beitrag anzeigen
              Ich habe einige Nächte (und Tage) mit Multicasting verbracht - und irgendwann habe ich glatt mal einen Blick in die PHP-Doku geworfen... Hätte ich vielleicht schon früher drauf kommen können...
              Ich hab das mit 5.4 schon gelesen, bin aber auf die Idee, mit phpversion() mal nachzuschauen nicht gekommen..... Leider nur 5.3.3, auf meinem Windows PC hatte ich mit neuerer Version getestet, jetzt wirds klar
              Kann ich wohl leider meinen Yamaha-Baustein erstmal auf Eis legen , dabei hab ich schon ein wenig Erfolg gesehen.
              Zuletzt geändert von Winni; 31.03.2016, 22:50.

              Kommentar


                #8
                Installiere doch ein socat (yum install socat), starte das im EXEC-Teil und arbeite darueber... nicht huebsch, aber muesste funktionieren.

                Kommentar


                  #9
                  ...oder eine aktuellere PHP-Version installieren - allerdings wird das dem "Endkunden" nix nützen Vielleicht sollte ich EDOMI mal mit einer frischeren PHP-Version ausliefern - mit fehlt nur aktuell die Zeit für eingehende Tests etc... Vielleicht hat jemand Interesse an einem derartigen Experiment?
                  EDOMI - Intelligente Steuerung und Visualisierung KNX-basierter Elektro-Installationen (http://www.edomi.de)

                  Kommentar


                    #10
                    Ich stelle mich gerne zur Verfügung (hoffentlich habe ich jetzt keinen Fehler gemacht...hehe).

                    Nein, obwohl ich unterdessen das halbe Haus mit Edomi steuere, würde ich bei diesem Experiment sicher mitmachen. Wenns der Weiterentwicklung von Edomi dient, why not.
                    Vorteil ist, dass ich immer noch unter einer VM fahre. Mit Snapshots wäre das Risiko also etwas gemildert. (Schlimm sind eher die schleichenden Fehler, die man nicht sofort bemerkt.)

                    Kommentar


                      #11
                      Das muss ich unterstuetzen

                      Schau mal hier: https://webtatic.com/
                      Das ist die quasi-RHEL-Instanz fuer aktuelle PHP Versionen, bestens gepflegt und immer up2date... verschiedene (also auch aeltere) PHP/MySQL Versionen stehen ebenfalls zur Verfuegung...

                      Kommentar


                        #12
                        Zitat von gaert Beitrag anzeigen
                        ...oder eine aktuellere PHP-Version installieren - allerdings wird das dem "Endkunden" nix nützen Vielleicht sollte ich EDOMI mal mit einer frischeren PHP-Version ausliefern - mit fehlt nur aktuell die Zeit für eingehende Tests etc... Vielleicht hat jemand Interesse an einem derartigen Experiment?

                        Ist nicht bcompiler derzeit der limitierende Faktor bzgl. der PHP Version?

                        Das war zumindest der Punkt an dem ich gescheitert bin. PHP 5.6 für CentOS 6.5 ist kein Problem, aber ohne bcompiler und somit ohne den EDOMI Kernel macht es dann nur halb so viel Spaß.

                        Kommentar


                          #13
                          Zitat von jonofe Beitrag anzeigen
                          Ist nicht bcompiler derzeit der limitierende Faktor bzgl. der PHP Version?
                          Mag gut sein, weiss ich nicht
                          Jedenfalls ist webtatic die Quelle fuer "identisch gebaute" aber modernen PHP Versionen. Also wenn man ueberhaupt damit rumprobieren will, dann sollte man diese Versionen benutzen - bevor man irgendwas selber kompilieren (und pflegen) muss.

                          Kommentar


                            #14
                            Zitat von wintermute Beitrag anzeigen
                            Installiere doch ein socat (yum install socat), starte das im EXEC-Teil und arbeite darueber... nicht huebsch, aber muesste funktionieren.
                            Nach einigem Googeln hab' ich sogar das installieren hinbekommen.
                            In der Shell
                            socat -d -d -d -d - udp-datagram:234.6.6.6:9050,bind=:9050,ip-add-membership=234.6.6.6:eth0,bindtodevice=eth0
                            eingegeben, meckert zwar, da der Port ja wohl von meinem LBS schon belegt ist, aber der rennt dann plötzlich los :-)

                            Komme erstmal wieder ein Stückchen weiter, besten Dank.

                            Kommentar


                              #15
                              Bevor ich jetzt hier in der Arbeit rausfliege vor lauter Ausprobieren:
                              wintermute, wie muss ich das im exec-Teil denn starten?
                              mit shell_exec() klappt immer nur einmal (manchmal zweimal) empfangen.
                              mit pcntl_fork() hatte ich überhaupt keinen Erfolg.
                              Nur wenn ich in einem Shell socat ausführe und es dort aktiv ist funktioniert es (klar, zum Testen erstmal ok)

                              Bin leider ein kompletter Linux / php Newbie.

                              Winni

                              Kommentar

                              Lädt...
                              X