iOS 中對IPv6的適配
int NS_Socket::Connect(const char *Host, unsigned short Port)
{
struct addrinfo * result;
struct addrinfo * res;
int error;
error = getaddrinfo(Host, NULL, NULL, &result);
if(error != 0) {
NSLog(@"error in getaddrinfo:%d", error);
return NS_SOCKET_ERROR_HOST_NOTFOUND;
}
for(res = result; res!=NULL; res = res->ai_next) {
char hostname[1025] = "";
error = getnameinfo(res->ai_addr, res->ai_addrlen, hostname, 1025, NULL, 0, 0);
NSLog(@"hostname=%s",hostname);
if(error != 0) {
NSLog(@"error in getnameifno: %s", gai_strerror(error));
continue;
}
else {
switch (res->ai_addr->sa_family)
{
case AF_INET6:
{
if(subConnectServerIPV6(hostname ,Port)==0)
{
NSLog(@"6連線成功");
freeaddrinfo(result);
return 0;
}else{
return subConnectServerIPV6(hostname ,Port);
}
}
break;
case AF_INET:
{
if(subConnectServerIPV4(hostname ,Port)==0)
{
NSLog(@"4連線成功");
freeaddrinfo(result);
return 0;
}else
{
return subConnectServerIPV4(hostname ,Port);
}
}
break;
default:
break;
}
NSLog(@"hostname: %s ", hostname);
}
}
return NS_SOCKET_ERROR_CONNECT;
}
本地搭建IPv6測試環境
首先需要的就是一臺用非Wi-Fi的方式上網的Mac電腦。其本質就是用Mac做一個熱點,然後用iPhone連線這個Wi-Fi,區別是這次我們產生的是一個本地的IPv6 DNS64/NAT64網路,這項功能是OS X 10.11新加的。和我們以前開啟熱點方式不一樣的地方在於,我們在“System Preferences”介面選中“Sharing”的同時,要按住“Option”鍵。
之後在“Sharing”介面中,我們會看到和之前不一樣的地方,就是紅框所標的地方,多了一個叫“Create NAT64 Network”的選框,選中它。之後就是按照正常的建立熱點的流程走完就行了。