Cómo comprobar si la interfaz está activa

El título lo dice todo. Si corroifconfig, Entiendo esto:

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
    inet -snip-  netmask 255.255.255.0  broadcast -snip-
    ...

Usando esto, puedo saber si está arriba o no (<UP,...), pero quiero poder hacer esto en C (o C ++, si hay una solución más simple allí) sin depender de los procesos externos de análisis.

Esto es lo que tengo hasta ahora (no funciona):

bool is_interface_online(std::string interface) {
    struct ifreq ifr;
    int sock = socket(PF_INET6, SOCK_DGRAM, IPPROTO_IP);
    memset(&ifr, 0, sizeof(ifr));
    strcpy(ifr.ifr_name, interface.c_str());
    if (ioctl(sock, SIOCGIFFLAGS, &ifr) < 0) {
            perror("SIOCGIFFLAGS");
    }
    close(sock);
    return !!(ifr.ifr_flags | IFF_UP);
}

¿Alguien puede indicarme la dirección correcta para esto?

Respuestas a la pregunta(3)

Su respuesta a la pregunta