求助:如何检测网线插拔
-
在程序中如何检测网线的插拔事件?网上搜了下,发现大都用类似下面的代码处理
int sockfd;
int i,len;
char buf[4096];
struct iovec iov;
struct msghdr msg;
struct sockaddr_nl sa;memset(&sa,0,sizeof(sa)); sa.nl_family=AF_NETLINK; sa.nl_groups=NETLINK_KOBJECT_UEVENT; sa.nl_pid = 0; memset(&msg,0,sizeof(msg)); iov.iov_base=(void *)buf; iov.iov_len=sizeof(buf); msg.msg_name=(void *)&sa; msg.msg_namelen=sizeof(sa); msg.msg_iov=&iov; msg.msg_iovlen=1; sockfd=socket(AF_NETLINK,SOCK_RAW,NETLINK_KOBJECT_UEVENT); if(sockfd==-1) printf("socket creating failed:%s\n",strerror(errno)); if(bind(sockfd,(struct sockaddr *)&sa,sizeof(sa))==-1) printf("bind error:%s\n",strerror(errno)); len=recvmsg(sockfd,&msg,0); if(len<0) printf("receive error\n"); else if(len<32||len>sizeof(buf)) printf("invalid message"); for(i=0;i<len;i++) if(*(buf+i)=='\0') buf[i]='\n'; printf("received %d bytes\n%s\n",len,buf);
但我试过,在widora平台上还是无法检测到网线的插拔
请问还有其它方法么?
-
mtk可以通过读取交换机芯片的寄存器来获取插拔状态。
-
但那样只能通过轮询了,我想通过异步事件方式来通知,能做到么