Het IP verkrijgen van de interface die een recvfrom () UDP-pakket heeft ontvangen (Microsoft)

Gebruik van recvfrom() op een socket gebonden aan INADDR_ANY op een Microsoft multihomed pc. wanneer recvfrom() een UDP-pakket krijgt: hoe kan ik de interface (IP) vinden die het pakket heeft ontvangen?

0
Microsoft PC? Dat is een behoorlijk breed scala aan mogelijkheden, ik ga uit van Windows - maar toch, welke versie? Win 3.11 en Win 7 zijn iets anders anders. Wat heb je ook geprobeerd? Welke resultaten verwachtte u? Wat heb je in plaats daarvan gekregen?
toegevoegd de auteur Piskvor, de bron
--om de een of andere reden kan ik de originele post niet bewerken - met behulp van recvfrom() van win2000 (ik kan WSARecvMsg ()) niet gebruiken om Win7 te gebruiken. Ik kon hier niets voor vinden
toegevoegd de auteur user664239, de bron

1 antwoord

Er is geen manier om de ontvangende IP te kennen wanneer een enkele luisterende socket aan meerdere IP's is gekoppeld. In plaats van een enkele socket aan INADDR_ANY te binden, kunt u de lijst met lokale IP's van de machine opvragen met GetAdaptersInfo() en/of GetAdapterAddresses() , maak vervolgens voor elke IP een aparte luisterpositie aan. U kunt getsockname() gebruiken om te weten aan welk IP-adres een bepaalde socket is gebonden, maar alleen wanneer die socket is gebonden aan een specifiek IP-adres, niet aan meerdere IP's.

0
toegevoegd