Я пытаюсь перенести некоторый код из 32-битной Windows (XP и Server 2003) в 64-битную Windows 7, и у меня странная проблема с gethostbyname.
Я делаю что-то вроде этого:
struct hostent *hp;
hp = gethostbyname( host );
После вызова gethostbyname указатель hp-> h_addr_list недействителен. У него все правильные числа, но похоже, что 32-битный указатель каким-то образом попал в неправильное пространство.
Например, я получаю
hp-> h_addr_list = 0x0064bdd800000000
Если я вручную поменяю местами первую и последнюю половину так, чтобы hp-> h_addr_list = 0x000000000064bdd8, тогда указатель действителен и указывает на правильные данные.
Иногда я получаю baadf00d вместо нулей (то есть hp-> h_addr_list = 0x0064bdd8baadf00d),
Насколько я могу судить, все связано с правильной 64-битной версией библиотек winsock, поэтому я не уверен, что может вызвать такую проблему.