Hostname auflösen - getaddrinfo()
-
Hallo kann mir einer ein kurzes Schnisel zeigen wie man mit der Funnktion getaddrinfo() einen Hostname wie "www.c-plusplus.net" auflösen kann? Ich werd aus der MSDN irgendwie nicht schlau...
Außerdem hab ich komische IP Formate die ich ständig casten muss und trotzdem kommt nix bei raus.
Gruß Fire
-
Sag mal wo du konkret Probleme hast...
-
jo also ich blick net was die Funktion genau macht, ich verwende sie auch zum ersten mal weil ich gerade in der MSDN gelesen habe dass man gethostbyname() nicht mehr verwenden sollte. In der MSDN steht was davon dass das Ergebniss eine Linked List ist, aber warum? Zu einem Hostname kann es doch nicht mehrere Server geben.
Mein Anfang sie sieht so:
// Meine Verbidungseinstellungen std::string server = "hostname""; // Pointer für die Linked List addrinfo *aiList = NULL; // Hostname auflösen int result = getaddrinfo(server.c_str(), port.c_str(), NULL, &aiList); if(result != 0) { /* wild mit exceptions schmeissen */ }Ich weiß nicht ob es stimmt, und falls ja weis ich nicht wo jetzt die IP ist (ich bräuchte im Endeffeckt sockaddr_in)
-
Die addrinfo Struktur hat doch nen Member ai_addr.

-
...zu einem Hostname kann es mehrere IP Adressen geben.
-
Ahhh nun hab ichs geblickt... Man kann das so machen:
*reinterpret_cast<sockaddr_in*>(aiList->ai_addr);Ich kam da so durcheinanden weil einmal sockaddr_in und sockaddr. Danek nochmals

Ich kenn mit überhaupt net aus mit Hostnames und so...
Aber ich kann doch diese IP einfach nehmen oder? Wenn ich mit ping den Hostname auflöse komm ich auf die selbe IP hat also geklappt.
-
Kenne mich mit Hostnames auch nicht aus

Beachte das du auch ne IPv6 Adresse (oder noch was anderes) bekommen kannst. Dann klappt dein Code nicht mehr. Guck dir SOCKADDR_STORAGE an, darin kannst du beliebige Adressen speichern.
-
oder bei den hints angeben das du nur IPv4 (AF_INET) willst.
-
Danke habs bei Hints rein gemacht.
-
www.google.com gibt mir 2 IP Adressen
www.yahoo.com gibt mir 8 IP Adressen