2009-03-13 8 views
1

J'utilise la fonction gethostbyname() de la manière habituelle ...gethostbyname d'erreur win32

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); 
} 

pour accéder à mon site web et de renseignements. La variable "lpServerName" peut être n'importe quel hôte, par exemple "google.com" ou "loopback", "127.0.0.1". Mon système: Windows x64 ou x32 (peu importe la même erreur) fonctionnant sur un système AMD Opteron, XAMPP est sur ma machine et je l'utilise à des fins de débogage, mon compilateur est Microsoft Visual C++ 2005.

Voici le problème: lorsque j'utilise l'adresse de retour, le code ci-dessus fonctionne correctement. Lorsque j'essaie d'accéder à un site Web externe à mon ordinateur, j'obtiens l'erreur suivante: "Windows a déclenché un point d'arrêt dans test_gethostbyname.exe. Cela peut être dû à une corruption du tas, et indique un bogue dans test_gethostbyname.exe ou tout autre des DLL qu'il a chargé.La fenêtre de sortie peut avoir plus d'informations de diagnostic ". Le programme "test_gethostbyname.exe" contient uniquement les parties du code d'un projet beaucoup plus important qui s'applique à l'accès à Internet. Ainsi, je ne pense pas que le tas soit corrompu par tout ce que j'ai fait. J'ai essayé la commande "getaddrinfo" avec les mêmes résultats. J'ai cherché sur le web n'importe quel type d'information sur ce problème sans joie (autre que les fautes de segmentation sur les systèmes Unix).

Quelqu'un connaît-il un problème avec cette commande qui provoquerait cette erreur?

Merci à l'avance,

Jay

+0

Vous avez essayé les adresses IP et les noms de domaine? – Paxic

+0

Oui, en vain. – jay

Répondre

0

J'ai trouvé la réponse. Le problème semble être les bibliothèques sur mon système XP.Comme je l'ai mentionné auparavant, j'ai compilé le programme sur un autre système XP sans problème. J'ai compilé le système sur mon système de développement avec Windows 7 et Visual C++ 8 express et cela a fonctionné.

0

Est lpServerName:

  • NULL TERMINATED
  • NULL
  • déjà supprimé

Je dirais qu'il est non NULL terminé.

Peut-être inet_addr s'arrêtera-t-il même s'il ne voit pas de terminaison NULL, c'est pourquoi cela fonctionne quand vous utilisez une chaîne pointillée IP normale.

0

J'ai joué avec si oui ou non la chaîne est terminée et l'erreur n'a pas disparu. L'exemple que j'ai compilé provient de la description Microsoft de gethostname() que je suppose être fonctionnellement correct, mais je reçois toujours l'erreur.

Ce matin, j'ai recompilé l'exemple sur une autre machine qui utilise la version express de Visual C++ et l'erreur ne se produit pas. Ainsi, je commence à suspecter qu'il pourrait y avoir un problème avec les librairies de librairies sur ma machine de développement, donc je vais réinstaller le compilateur et le SDK de plate-forme et voir si cela corrige le problème.