Problem mit gethostbyname()



  • Hi.

    Ich habe mir eine kleine Funktion gebastelt, die einen String entgegennimmt der entweder eine IPv4-Addresse oder einen Hostnamen enthält und auflöst.
    Komischerweise wird hierbei immer die Exception geworfen (Hab es mit "google.de" probiert, warum?

    std::vector<unsigned long> resolveInetHostname(const std::string& hostname)
    	{
    		std::vector<unsigned long> resolvedAddresses;
    
    		unsigned long address = inet_addr(hostname.c_str());
            if(address != INADDR_NONE)
            {
    			//inet_addr returned a address, so it was a valid IPv4-address
    			resolvedAddresses.push_back(address);
            }
            else
            {
    			//inet_addr returned no address, so we assume its a hostname
    			hostent* host = gethostbyname(hostname.c_str());
    			if(host == NULL)
    				throw std::exception("resolveInetHostname() Error : Couldn't resolve hostname");
    
    			//Iterate addresslist and copy all found addresses
                for(char** list = host->h_addr_list; *list != NULL; ++list)
    				resolvedAddresses.push_back(*reinterpret_cast<unsigned long*>(*list));
            }
    
    		return resolvedAddresses;
    	}
    

    Glaube hier ist sowieso noch ein Wurm drin, diese Pointer auf Pointer-Arrays verwirren mich immer etwas 😉

    Danke !



  • Das heißt also dein host ist gleich null. Also mal mit WSAGetLastError den Fehler auslesen und mir den Error codes vergleichen.



  • oneill5000 schrieb:

    Das heißt also dein host ist gleich null. Also mal mit WSAGetLastError den Fehler auslesen und mir den Error codes vergleichen.

    Ach, hab einen Teil meiner Lib neu geschrieben und beim Testen hab ich jetzt kein WSA gestartet....das wars also, blöd von mir, danke für den Anstoß.

    Wie kann ich eigentlich WSAGetLastError threadsicher gestalten? Stelle es mir kompliziert vor wenn eine große Zahl Sockets gleichzeitig arbeiten und möglicherweise Fehler verursachen.


Anmelden zum Antworten