Доброго времени суток. Мой мозг интересует вопрос, который уже два дня не дает мне покоя - как программно (в моем случае это C/C++) определить подключен-ли (в данный момент) к eth0 сетевой кабель или не подключен?
В интернете нашел два решения и оба не рабочие:
Первое:
int fd = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
struct ifreq ethreq;
memset(ðreq, 0, sizeof(ethreq));
/* set the name of the interface we wish to check */
strncpy(ethreq.ifr_name, "eth0", IFNAMSIZ);
/* grab flags associated with this interface */
ioctl(fd, SIOCGIFFLAGS, ðreq);
if (ethreq.ifr_flags & IFF_RUNNING)
{
std::cout<<"Runing"<<std::endl; // всегда выводится это
}
else
{
std::cout<<"Not Runing"<<std::endl;
}
close(fd);
Второе:
cat /sys/class/net/eth0/carrier - всегда равно единице.