1. 程式人生 > >iOS 中對IPv6的適配

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”的選框,選中它。之後就是按照正常的建立熱點的流程走完就行了。