windows - Sådan modtager du ip multicast, kun ved hjælp af et NIC

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har server med flere NIC'er, der kører Windows Server 2003. Min ansøgning modtager multicast-pakker, men nu skal jeg modtage multicast-pakker lige fra en enkelt netværksgrænseflade. Jeg tror, ​​det kan hjælpe, men jeg har nogle spørgsmål.


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;
}


Først og fremmest, hvad skal jeg bruge som en netværksinterface adresse? Lokal adresse på netværksgrænsefladen (samme som ipconfig returnerer) eller indeks for netværksgrænsefladen, som jeg kan få ved hjælp af GetAdaptersAddresses api-funktionen?


For det andet er dette faktisk muligt med Windows, eller bruger jeg bare min tid?


Opdater
Jeg har lige læst om WSAJoinLeaf-funktionen, og jeg undrer mig over, at det ikke er muligt at bruge kun et NIC til multicaster.

Bedste reference


Først: dit valg. Se http://msdn.microsoft.com/en-us/library/ms738695(VS.85).aspx[2]


Andet: Ja, det skal helt sikkert være muligt. :)

Andre referencer 1


Ja dette virker, du kan kun bruge GetAdaptersInfo til IPv4-grænseflader eller GetAdaptersAddresses for begge familier. [3] [4]


Bemærk, at mreq kun angiver en grænseflade ved adresse ikke indeks, ip6\_mreq og GROUP\_REQ (familie agnostiske) versioner foretrækker et indeks, fordi IPv6 giver dig mulighed for at have flere matchende link-lokale adresser, men være forbundet til forskellige netværk. [5]