getaddrinfo不一致的行为

时间:2010-08-13 03:46:07

标签: c sockets network-programming ipv6 ipv4

我正在使用getaddrinfo启动本地服务器,只接受本地主机上的连接:

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存在时给我IPv6地址:: 1,而在不存在时给我IPv4地址 除了有时在Windows 2008 R2上(至少那是我见过它的唯一系统,但我看到它两次,在客户系统上都是这两次)它被绑定到127.0.0.1而不是IPv6! 然后这会让我感到困惑,因为如果你绑定:: 1它将接受到127.1和:: 1的连接,但是如果绑定127.1,则不接受IPv6连接。

1 个答案:

答案 0 :(得分:3)

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

相关问题