多个网卡时socket与网卡对应关系如何确定?
我的一个pc机上有多个网卡,我想要分别用ioctl控制网卡和获得网卡信息,但是我用socket创建原始套接字不知道怎么确定这个套接字是怎么与网卡相关的?
还有就是怎么用ioctl控制网卡开关(是数据获取的开关,但是不影响接收命令)? socket
[解决办法]
http://blog.csdn.net/rao_warrior/article/details/8227603
我想这里应该有你想要的答案
[解决办法]
//启动网卡接口
int SetEtherStatusUP(const char *ethNum)
{
struct ifreq ifr;
int sockfd;
if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
{
printf("Create socket fails!\n");
return -1;
}
strcpy(ifr.ifr_name, ethNum);
if (ioctl(sockfd, SIOCGIFFLAGS, &ifr) < 0)
{
printf("ioctl SIOCGIFFLAGS fails!\n");
close(sockfd);
return -1;
}
ifr.ifr_flags
[解决办法]
= IFF_UP;
if (ioctl(sockfd, SIOCSIFFLAGS, &ifr) < 0)
{
printf("ioctl SIOCSIFFLAGS fails!\n");
close(sockfd);
return -1;
}
close(sockfd);
return 1;
}
//关闭网卡接口
int SetEtherStatusDOWN(const char *ethNum)
{
struct ifreq ifr;
int sockfd;
if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
{
printf("Create socket fails!\n");
return -1;
}
strcpy(ifr.ifr_name, ethNum);
if (ioctl(sockfd, SIOCGIFFLAGS, &ifr) < 0)
{
printf("ioctl SIOCGIFFLAGS fails!\n");
close(sockfd);
return -1;
}
ifr.ifr_flags &= ~IFF_UP;
if (ioctl(sockfd, SIOCSIFFLAGS, &ifr) < 0)
{
printf("ioctl SIOCSIFFLAGS fails!\n");
close(sockfd);
return -1;
}
close(sockfd);
return 1;
}
这两段代码希望对你有帮助
[解决办法]
bind函数似乎是用来bind指定IP的
[解决办法]
肯定有关啊,socket就是用来描述IP地址和端口的啊,一个网卡一个IP。不能用同个socket返回,每种服务都打开一个Socket,并绑定到一个端口上,是一一对应的。