static int check_protocol_support(bool *has_ipv4, bool *has_ipv6)

{

#ifdef HAVE_IFADDRS_H

    struct ifaddrs *ifaddr = NULL, *ifa;

    struct addrinfo hints = { 0 };

    struct addrinfo *ai = NULL;

    int gaierr;



    *has_ipv4 = *has_ipv6 = false;



    if (getifaddrs(&ifaddr) < 0) {

        g_printerr("Failed to lookup interface addresses: %s\n",

                   strerror(errno));

        return -1;

    }



    for (ifa = ifaddr; ifa != NULL; ifa = ifa->ifa_next) {

        if (!ifa->ifa_addr) {

            continue;

        }



        if (ifa->ifa_addr->sa_family == AF_INET) {

            *has_ipv4 = true;

        }

        if (ifa->ifa_addr->sa_family == AF_INET6) {

            *has_ipv6 = true;

        }

    }



    freeifaddrs(ifaddr);



    hints.ai_flags = AI_PASSIVE | AI_ADDRCONFIG;

    hints.ai_family = AF_INET6;

    hints.ai_socktype = SOCK_STREAM;



    gaierr = getaddrinfo("::1", NULL, &hints, &ai);

    if (gaierr != 0) {

        if (gaierr == EAI_ADDRFAMILY ||

            gaierr == EAI_FAMILY ||

            gaierr == EAI_NONAME) {

            *has_ipv6 = false;

        } else {

            g_printerr("Failed to resolve ::1 address: %s\n",

                       gai_strerror(gaierr));

            return -1;

        }

    }



    freeaddrinfo(ai);



    return 0;

#else

    *has_ipv4 = *has_ipv6 = false;



    return -1;

#endif

}

static int check_protocol_support(bool *has_ipv4, bool *has_ipv6)

{

#ifdef HAVE_IFADDRS_H

    struct ifaddrs *ifaddr = NULL, *ifa;

    struct addrinfo hints = { 0 };

    struct addrinfo *ai = NULL;

    int gaierr;



    *has_ipv4 = *has_ipv6 = false;



    if (getifaddrs(&ifaddr) < 0) {

        g_printerr("Failed to lookup interface addresses: %s\n",

                   strerror(errno));

        return -1;

    }



    for (ifa = ifaddr; ifa != NULL; ifa = ifa->ifa_next) {

        if (!ifa->ifa_addr) {

            continue;

        }



        if (ifa->ifa_addr->sa_family == AF_INET) {

            *has_ipv4 = true;

        }

        if (ifa->ifa_addr->sa_family == AF_INET6) {

            *has_ipv6 = true;

        }

    }



    freeifaddrs(ifaddr);



    hints.ai_flags = AI_PASSIVE | AI_ADDRCONFIG;

    hints.ai_family = AF_INET6;

    hints.ai_socktype = SOCK_STREAM;



    gaierr = getaddrinfo("::1", NULL, &hints, &ai);

    if (gaierr != 0) {

        if (gaierr == EAI_ADDRFAMILY ||

            gaierr == EAI_FAMILY ||

            gaierr == EAI_NONAME) {

            *has_ipv6 = false;

        } else {

            g_printerr("Failed to resolve ::1 address: %s\n",

                       gai_strerror(gaierr));

            return -1;

        }

    }



    freeaddrinfo(ai);



    return 0;

#else

    *has_ipv4 = *has_ipv6 = false;



    return -1;

#endif

}

static int FUNC_0(bool *VAR_0, bool *VAR_1)

{

#ifdef HAVE_IFADDRS_H

    struct ifaddrs *ifaddr = NULL, *ifa;

    struct addrinfo hints = { 0 };

    struct addrinfo *ai = NULL;

    int gaierr;



    *VAR_0 = *VAR_1 = false;



    if (getifaddrs(&ifaddr) < 0) {

        g_printerr("Failed to lookup interface addresses: %s\n",

                   strerror(errno));

        return -1;

    }



    for (ifa = ifaddr; ifa != NULL; ifa = ifa->ifa_next) {

        if (!ifa->ifa_addr) {

            continue;

        }



        if (ifa->ifa_addr->sa_family == AF_INET) {

            *VAR_0 = true;

        }

        if (ifa->ifa_addr->sa_family == AF_INET6) {

            *VAR_1 = true;

        }

    }



    freeifaddrs(ifaddr);



    hints.ai_flags = AI_PASSIVE | AI_ADDRCONFIG;

    hints.ai_family = AF_INET6;

    hints.ai_socktype = SOCK_STREAM;



    gaierr = getaddrinfo("::1", NULL, &hints, &ai);

    if (gaierr != 0) {

        if (gaierr == EAI_ADDRFAMILY ||

            gaierr == EAI_FAMILY ||

            gaierr == EAI_NONAME) {

            *VAR_1 = false;

        } else {

            g_printerr("Failed to resolve ::1 address: %s\n",

                       gai_strerror(gaierr));

            return -1;

        }

    }



    freeaddrinfo(ai);



    return 0;

#else

    *VAR_0 = *VAR_1 = false;



    return -1;

#endif

}

static int FUNC_0(bool *VAR_0, bool *VAR_1)
{ #ifdef HAVE_IFADDRS_H
struct ifaddrs *ifaddr = NULL, *ifa; struct addrinfo hints = { 0 }; struct addrinfo *ai = NULL; int gaierr; *VAR_0 = *VAR_1 = false; if (getifaddrs(&ifaddr) < 0) { g_printerr("Failed to lookup interface addresses: %s\n",
strerror(errno)); return -1; } for (ifa = ifaddr; ifa != NULL; ifa = ifa->ifa_next) { if (!ifa->ifa_addr) { continue; } if (ifa->ifa_addr->sa_family == AF_INET) { *VAR_0 = true; } if (ifa->ifa_addr->sa_family == AF_INET6) { *VAR_1 = true; } } freeifaddrs(ifaddr); hints.ai_flags = AI_PASSIVE | AI_ADDRCONFIG; hints.ai_family = AF_INET6; hints.ai_socktype = SOCK_STREAM; gaierr = getaddrinfo("::1", NULL, &hints, &ai); if (gaierr != 0) { if (gaierr == EAI_ADDRFAMILY ||
gaierr == EAI_FAMILY ||
gaierr == EAI_NONAME) { *VAR_1 = false; } else { g_printerr("Failed to resolve ::1 address: %s\n",
gai_strerror(gaierr)); return -1; } } freeaddrinfo(ai); return 0; #else
*VAR_0 = *VAR_1 = false; return -1; #endif
}