How to check if interface is up

前端 未结 3 773
情歌与酒
情歌与酒 2020-12-31 15:19

Title pretty much says it all. If I run ifconfig, I get this:

eth0: flags=4163  mtu 1500
    inet -snip-           


        
3条回答
  •  攒了一身酷
    2020-12-31 15:52

    Answer was simple: I used the bitwise OR (|) operator instead of the AND (&) operator. Fixed code is:

    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);
    }
    

提交回复
热议问题