Sichergehen, dass alle Pakete einer Multicastadresse empfangen werden
-
Hallo,
von mehreren Computern werden über UDP Daten an Multicastadressen geschickt. Alle Computer sind über einen Switch miteinander verbunden. Da ich alle Daten empfangen will, öffne ich einen Socket und führe folgenden Code aus:
string multicastAddr = "239.255.10.1"; // eine Multicastadresse // construct an IGMP join request structure mc_req.imr_multiaddr.s_addr = inet_addr( multicastAddr.c_str() ); mc_req.imr_interface.s_addr = htonl( INADDR_ANY ); // send an ADD MEMBERSHIP message via setsockopt if( (setsockopt (sock, IPPROTO_IP, IP_ADD_MEMBERSHIP, (char FAR*) &mc_req, sizeof( mc_req ))) < 0 ) { perror("setsockopt() failed"); return false; }Durch die Funktion "setsockopt" wird automatisch eine IGMP-Message an den Switch geschickt. Dadurch schickt der Switch mir alle Pakete, die an die übergebene Multicastadresse gerichtet sind.
Jetzt meine eigentliche Frage:
Ich möchte sichergehen, dass ich auch wirklich alle Pakete empfange. Was ist nämlich wenn der Switch ne gewisse Zeit ausfällt und deshalb nicht mehr weiß, dass ich Pakete einer bestimmten Multicastadresse empfangen will?
Ich kann mich nämlich nur einmal beim Switch registrieren. Jedes erneute aufrufen der "setsockopt"-Funktion gibt einen Fehler.
Wie kann ich also erneut eine ADD_MEMBERSHIP-Message senden, damit der Switch mich nicht vergisst??Danke!