Verlust der Netzwerkverbindung beim UDP Multicasting unter Linux vs. OSX
-
Hallo Leute,
ich habe einen Multicast-fähigen Sender und einen Empfänger mithilfe von Boost.Asio programmiert und teste gerade verschiedene Use-Cases auf Linux und auf Mac OSX.
Dabei ist mir aufgefallen, dass sich Linux und OSX beim Verlust der Netzwerkverbindung (Kabel abziehen) grundsätzlich unterschiedlich verhalten.
Und zwar bekomme ich beim Verlust der Netzwerkverbindung beim send_to() unter Linux einen Fehler zurück: Asio meldet "Network is unreachable".
Unter OSX hingegen bekomme ich überhaupt keinen Fehler. send_to() gibt weiterhin die korrekte Anzahl von bytes als geschrieben zurück.Wenn ich das Netzwerkkabel dann wieder dranstecke, fängt Linux an, wieder fröhlich weiterzusenden, sobald es eine IP-Adresse hat.
Bei OSX hingegen kommt dann (und zwar erst, wenn das Netzwerkkabel steckt!) ein Fehler "Network is unreachable" so lange, bis er wieder einen DHCP-Lease hat. Sobald die IP-Adresse dann gesetzt ist, sendet auch OSX wieder fröhlich weiter.Was mir noch aufgefallen ist: Der Empfänger ist auf INADRR_ANY gebindet (bevor das joingroup gemacht wird). Unter Linux empfängt er im Falle des abgesteckten Netzwerkkabels weiterhin die abgesetzten Pakete über den Loopback-Adapter. Unter OSX tut er das nicht, da empfängt er garnix (während der Sender KEINEN FEHLER meldet).
Ist jemand in Sachen Netzwerkprogrammierung unter OSX so bewandert, dass er mir erklären kann, warum es sich so grundlegend anders verhält?
Gruß,
Phil