代码之家  ›  专栏  ›  技术社区  ›  MK.

getaddrinfo不一致行为

  •  1
  • MK.  · 技术社区  · 14 年前

    struct addrinfo *res;
    struct addrinfo hints = {0};
    hints.ai_family = AF_UNSPEC;
    hints.ai_socktype = SOCK_STREAM;
    hints.ai_protocol = IPPROTO_TCP;
    getaddrinfo(NULL, portbuf, &hints, &res);
    

    这似乎工作得很好,给我的IPv6地址::1时,IPv6的存在和IPv4地址时,它不是。
    除了有时在Windows2008R2上(至少这是我见过的唯一一个系统,但我见过两次,两次都是在客户系统上)它被绑定到127.0.0.1而不是IPv6!

    1 回复  |  直到 14 年前
        1
  •  3
  •   caf    14 年前

    getaddrinfo() 列表 按未指定顺序排列的匹配地址。您应该遍历列表(在 ai_next 指针),并创建绑定到返回的每个地址的侦听套接字。