2009-03-13 11 views
1

Ich verwende die Funktion gethostbyname() in der üblichen Weise ...gethostbyname win32 Fehler

iaHost.s_addr = inet_addr(lpServerName); 
if (iaHost.s_addr == INADDR_NONE) 
{ 
    // Wasn't an IP address string, assume it is a name 
    lpHostEntry = 0; 
    lpHostEntry = gethostbyname(lpServerName); 
} 

auf meiner Web-Site zugreifen und Informationen zurückgeben. Die Variable "lpServerName" kann ein beliebiger Host sein, z. B. "google.com" oder der Loopback "127.0.0.1".

Mein System: Windows x64 oder x32 (es spielt keine Rolle, der gleiche Fehler auftritt) läuft auf einem AMD Opteron System, XAMPP ist auf meinem Rechner und ich benutze es für Debugging-Zwecke, mein Compiler ist Microsoft Visual C++ 2005.

Hier ist das Problem: Wenn ich die Loop-Back-Adresse verwenden, funktioniert der obige Code gut. Wenn ich versuche, auf eine Website außerhalb meines Computers zuzugreifen, erhalte ich den folgenden Fehler: "Windows hat in test_gethostbyname.exe einen Haltepunkt ausgelöst. Dies liegt möglicherweise an einer Beschädigung des Heapspeichers und weist auf einen Fehler in test_gethostbyname.exe oder anderen hin der geladenen DLLs. Das Ausgabefenster kann weitere Diagnoseinformationen enthalten. " Das Programm "test_gethostbyname.exe" enthält nur die Teile des Codes aus einem viel größeren Projekt, die für den Zugriff auf das Internet gelten. Daher glaube ich nicht, dass der Haufen durch irgendetwas, was ich getan habe, verdorben wird. Ich habe den Befehl "getaddrinfo" mit den gleichen Ergebnissen versucht. Ich habe das Web nach irgendwelchen Informationen zu diesem Problem ohne Freude durchsucht (abgesehen von Segmentierungsfehlern auf Unix-Systemen).

Kennt jemand irgendein Problem mit diesem Befehl, der diesen Fehler verursachen würde?

Vielen Dank im Voraus,

Jay

+0

Sie haben sowohl IPs als auch Domainnamen ausprobiert? – Paxic

+0

Ja, ohne Erfolg. – jay

Antwort

0

Ich habe die Antwort gefunden. Das Problem scheint die Bibliotheken auf meinem XP-System zu sein.Wie bereits erwähnt, habe ich das Programm problemlos auf einem anderen XP-System kompiliert. Ich habe das System auf meinem Entwicklungssystem mit Windows 7 und Visual C++ 8 Express kompiliert und es hat funktioniert.

0

Ist lpServerName:

  • nicht NULL
  • NULL
  • bereits

würde meine Vermutung, dass sie gelöscht terminierte ist nicht NULL beendet.

Vielleicht stoppt inet_addr, auch wenn es keine NULL-Terminierung gibt, deshalb funktioniert es, wenn Sie eine normale gepunktete IP-Zeichenfolge verwenden.

0

Ich habe mit gespielt, ob die Zeichenfolge null abgeschlossen ist und der Fehler nicht verschwunden ist. Das Beispiel, das ich kompiliert habe, stammt aus der Microsoft-Beschreibung von gethostname(), von der ich annehmen würde, dass sie funktional korrekt ist, aber ich bekomme immer noch den Fehler.

Heute Morgen habe ich das Beispiel auf einem anderen Rechner neu kompiliert, der die Express-Version von Visual C++ verwendet, und der Fehler tritt nicht auf. Daher beginne ich zu vermuten, dass es ein Problem mit den Bibliotheken auf meinem Entwicklungscomputer geben könnte, daher werde ich den Compiler und das Plattform-SDK neu installieren und prüfen, ob das Problem dadurch behoben wird.