Wie IP-Multicast, mit nur einer NIC empfangen
-
05-09-2019 - |
Frage
Ich habe Server mit mehreren NICs, Windows Server 2003. Meine Anwendung empfängt Multicast-Pakete laufen, aber jetzt muß ich Multicast-Pakete empfangen, nur von einer einzigen Netzwerk-Schnittstelle. Ich denke, das kann helfen, aber ich habe einige Fragen.
ip_mreq mreq;
mreq.imr_multiaddr.s_addr = multicast group address
mreq.imr_interface.s_addr= network interface address
if (setsockopt( socet
, IPPROTO_IP
, IP_ADD_MEMBERSHIP
, (const void *)&mreq
, sizeof(mreq)) < 0)
{
std::cerr << "setsockopt error" << std::endl;
}
Zunächst einmal, was benötige ich als Netzwerk-Schnittstelle-Adresse verwenden? Lokale Adresse der Netzwerkschnittstelle (gleiche dass ipconfig zurückkehrt), oder den Index der Netzwerkschnittstelle, die ich bekommen kann GetAdaptersAddresses api-Funktion?
Zweitens ist diese actualy möglich mit Fenstern, oder ich nur meine Zeit verbringen?
Aktualisieren Ich habe gerade gelesen, WSAJoinLeaf Funktion, und ich frage mich, dass es nicht möglich ist, nur eine NIC für Multicasts zu verwenden.
Lösung
Erstens: Ihre Wahl. Siehe http://msdn.microsoft.com/en- us / library / ms738695 (VS.85) aspx
Zweitens: Ja, das sollte auf jeden Fall möglich sein. :)
Andere Tipps
Ja, das funktioniert, können Sie GetAdaptersInfo nur für IPv4-Schnittstellen oder GetAdaptersAddresses für Familien.
Beachten Sie, dass mreq gibt nur eine Schnittstelle mit Adresse nicht Index, der ip6_mreq und GROUP_REQ (Familie Agnostiker) Versionen bevorzugen einen Index, weil IPv6 ermöglicht es Ihnen, mehrere passende Link-Local-Adressen haben, aber an verschiedene Netzwerke angeschlossen werden.