Abrufen der IP der Schnittstelle, die ein recvfrom () UDP-Paket (Microsoft) empfangen hat

Verwenden von recvfrom() an einem Socket, der an INADDR_ANY auf einem Microsoft-Multihomed-PC gebunden ist. wenn recvfrom() ein UDP-Paket erhält: Wie finde ich die Schnittstelle (IP), die das Paket empfangen hat?

0
Microsoft PC? Das ist eine ziemlich breite Palette von Möglichkeiten, ich nehme Windows - aber immer noch, welche Version? Win 3.11 und Win 7 sind leicht anders. Was hast du auch versucht? Welche Ergebnisse haben Sie erwartet? Was hast du stattdessen bekommen?
hinzugefügt der Autor Piskvor, Quelle
- aus irgendeinem Grund kann ich den ursprünglichen Beitrag nicht bearbeiten - mit recvfrom() aus win2000 (ich kann WSARecvMsg() nicht verwenden) bis Win7 bisher konnte ich nichts finden, um dies zu tun
hinzugefügt der Autor user664239, Quelle

1 Antworten

Es gibt keine Möglichkeit, die Empfangs-IP zu kennen, wenn ein einzelner abhörender Socket an mehrere IPs gebunden ist. Anstatt einen einzelnen Socket an INADDR_ANY zu binden, können Sie die Liste der lokalen IPs des Rechners mit GetAdaptersInfo() und/oder GetAdapterAddresses() abfragen. Erstellen Sie dann für jede IP-Adresse einen separaten abhörenden Socket. Sie können getsockname() verwenden, um zu ermitteln, an welche IP-Adresse ein bestimmter Socket gebunden ist, aber nur, wenn dieser Socket an eine bestimmte IP-Adresse und nicht an mehrere IP-Adressen gebunden ist.

0
hinzugefügt