gethostbyname win32 error - PullRequest
       10

gethostbyname win32 error

1 голос
/ 13 марта 2009

Я использую функцию gethostbyname () обычным образом ...

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

для доступа к моему веб-сайту и возврата информации. Переменная "lpServerName" может быть любым хостом, например, "google.com" или обратной связью, "127.0.0.1".

Моя система: Windows x64 или x32 (не имеет значения, что возникает та же ошибка), работающая в системе AMD Opteron, XAMPP на моей машине, и я использую ее для целей отладки, мой компилятор - Microsoft Visual c ++ 2005.

Вот проблема: когда я использую адрес обратной связи, приведенный выше код работает нормально. Когда я пытаюсь получить доступ к внешнему веб-сайту на моем компьютере, я получаю следующую ошибку: «Windows сработала точку останова в test_gethostbyname.exe. Это может быть связано с повреждением кучи и указывает на ошибку в test_gethostbyname.exe или любую из загруженных библиотек. Окно вывода может содержать больше диагностической информации ". Программа test_gethostbyname.exe содержит только те части кода гораздо более крупного проекта, которые применяются для доступа в Интернет. Таким образом, я не думаю, что куча искажается из-за того, что я сделал. Я пробовал команду "getaddrinfo" с теми же результатами. Я искал в Интернете любую информацию по этой проблеме без радости (кроме ошибок сегментации в системах Unix).

Кто-нибудь знает о какой-либо проблеме с этой командой, которая могла бы вызвать эту ошибку?

Заранее спасибо,

Jay

Ответы [ 4 ]

1 голос
/ 13 марта 2009

Я вижу, что вы проверяете INADDR_NONE, а как насчет другого состояния отказа INADDR_ANY

http://msdn.microsoft.com/en-us/library/ms738563(VS.85).aspx

Какую строку вы передаете gethostbyname ()? Скорее всего, что-то не так с форматом lpServerName.

0 голосов
/ 17 марта 2009

Я нашел ответ. Проблема заключается в библиотеках в моей системе XP. Как я упоминал ранее, я без проблем скомпилировал программу на другой системе XP. Я скомпилировал систему в моей системе разработки с Windows 7 и Visual C ++ 8 Express, и она сработала.

0 голосов
/ 13 марта 2009

Я играл с тем, заканчивается ли строка нулем, и ошибка не исчезла. Я скомпилировал пример из описания gethostname () от Microsoft, которое, как я полагаю, является функционально правильным, но я все еще получаю сообщение об ошибке.

Этим утром я перекомпилировал пример на другом компьютере, который использует экспресс-версию Visual C ++, и ошибки не происходит. Таким образом, я начинаю подозревать, что может быть проблема с библиотеками библиотек на моей машине для разработки, поэтому я собираюсь переустановить компилятор и SDK платформы и посмотреть, исправит ли это проблему.

0 голосов
/ 13 марта 2009

lpServerName:

  • не NULL прекращено
  • NULL
  • уже удалено

Я думаю, что это не NULL прекращается.

Возможно, inet_addr остановится, даже если он не видит NULL-завершение, поэтому он работает, когда вы используете обычную IP-строку с точками.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...