1
我使用的getaddrinfo啓動本地服務器僅在本地主機接受連接:的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地址:: 1,當IPv6是當前和IPv4地址不在時。
除了有時在Windows 2008 R2上(至少這是我見過它的唯一系統,但我看到它兩次,兩次都在客戶系統上),它將綁定到127.0.0.1而不是IPv6!
這會讓我迷惑,因爲如果綁定:: 1,它將同時接受127.1和:: 1,但是如果綁定127.1,那麼IPv6連接將不被接受。
不知道..我不相信。我認爲只聽IPv6並且依靠IPv4也會被接受(在Windows 2003之上)是可以的。當我連接時,我會遍歷所有地址,但爲什麼在接受時會出現問題? 我意識到我將不得不作出更改,因爲我不能依靠IPv6地址成爲第一個返回的地址。我想了解的是導致它不是第一個的原因。由於我建立的所有系統都具有IPv6,但該客戶建立的所有系統都是先獲得IPv4。配置中必須有一些東西。 – 2010-08-13 16:01:16
@MK:這只是最可靠的方式,就是這樣。如果你只想聽一個地址,你可以遍歷列表,直到找到最好的一個(大概是'AF_INET6'地址,如果有的話)。 – caf 2010-08-14 05:17:49