代码之家  ›  专栏  ›  技术社区  ›  WildCrustacean

64位Windows上的gethostbyname问题

  •  0
  • WildCrustacean  · 技术社区  · 15 年前

    我正在尝试将一些代码从32位Windows(XP和Server2003)迁移到64位Windows7,但gethostbyname出现了一个奇怪的问题。

    struct hostent *hp;
    hp = gethostbyname( host );
    

    在调用gethostbyname之后,指针hp->地址列表无效。它有所有正确的数字,但它看起来像一个32位指针不知何故被塞进了错误的空间。

    例如,我得到的是

    hp->地址列表=0x0064BDD80000000

    如果手动交换上半部分和下半部分,则hp->h_addr_list=0x000000000064bdd8则指针有效并指向正确的数据。

    有时我得到的是baadf00d而不是零(即hp->地址列表=0x0064bdd8baadf00d),

    据我所知,所有内容都链接到正确的64位版本的winsock库,所以我不确定是什么导致了这种问题。

    3 回复  |  直到 15 年前
        1
  •  2
  •   Len Holgate    15 年前

    您可能想尝试使用 getaddrinfo() docs for gethostbyname 指出它的使用是不受鼓励的,而且现在已经不推荐使用它了(因此它很可能存在bug)。我对您遇到的问题没有任何经验,但我知道我使用的代码 getaddrinfo() 通过x86和x64上的Windows7在XP中运行良好。

        2
  •  0
  •   ChrisLively    15 年前

    baadf00d

    至于交换高位和低位,你的权利,它确实被放到了错误的位置。缺陷

        3
  •  0
  •   andrebroz    9 年前

    我遇到了同样的问题。问题是在项目设置中,结构成员对齐选项设置为4字节(/Zp4)。我将此选项返回到默认值,从而解决了问题。

    推荐文章