64位Windows上的gethostbyname问题

时间:2010-01-27 23:09:33

标签: 64-bit winsock winsock2 gethostbyname

我正在尝试将一些代码从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),

据我所知,一切都与winsock库的正确64位版本相关联,所以我不确定是什么原因导致这类问题。

3 个答案:

答案 0 :(得分:2)

您可能想尝试使用getaddrinfo()docs for gethostbyname指出不鼓励使用它,现在它已被弃用(因此可能存在错误)。我没有遇到过您遇到的问题的经验,但我知道我使用getaddrinfo()的代码在x86和x64上通过Windows 7在XP中运行良好。

答案 1 :(得分:0)

Microsoft使用

baadf00d来表示未初始化的已分配堆内存,因此将其归零可能是一个好主意。测试以确保。

至于交换高位和低位,你的权利,它确实被置于错误的位置。错误?

答案 2 :(得分:0)

我遇到了同样的问题。问题是在项目设置中,Struct Member Alignment选项设置为4个字节(/ Zp4)。我将此选项返回到Default,这解决了问题。