Developer/iOS

[iOS] 네트워크 연결 테스트

블로blow 2013. 2. 13. 20:31
728x90

-(BOOL) connetedToNetwork {

    //제로 주소를 생성한다.

    struct sockaddr_in zeroAddress;

    /*

     struct sockaddr_in {

     __uint8_t sin_len;

     sa_family_t sin_family; //주소 체계(Address family)

     in_port_t sin_port;   //포트번호

     struct in_addr sin_addr; // IP주소를 나타내는 32비트 정수 타입 구조체

     char sin_zero[8]; // sockaddr 같은 크기를 유지하기 위해 필요한 패딩(padding) 공간. 항상 0

     };

    */

    bzero(&zeroAddress, sizeof(zeroAddress));

    zeroAddress.sin_len = sizeof(zeroAddress);

    zeroAddress.sin_family = AF_INET;

    

    //네트워크 도달 가능 플래그

    SCNetworkReachabilityRef defaultRouteReachability = SCNetworkReachabilityCreateWithAddress(NULL, (struct sockaddr *)&zeroAddress);

    SCNetworkReachabilityFlags flags;

    BOOL didRetrieveFlags = SCNetworkReachabilityGetFlags(defaultRouteReachability, &flags);

    CFRelease(defaultRouteReachability);

    

    if(!didRetrieveFlags) {

        printf("Could not recover network flags/n");

        return NO;

    }

    

    BOOL isReachable = flags & kSCNetworkFlagsReachable;

    BOOL needsConnection = flags & kSCNetworkFlagsConnectionRequired;

    return(isReachable && !needsConnection) ? YES : NO;

    

}

728x90