首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

多个网卡时socket与网卡对应关系怎么确定

2013-03-27 
多个网卡时socket与网卡对应关系如何确定?我的一个pc机上有多个网卡,我想要分别用ioctl控制网卡和获得网卡

多个网卡时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,并绑定到一个端口上,是一一对应的。

热点排行