用 setsockopt () 来绑定网口
最近做一个项目要用到双网卡 ppp0 , ppp1 都是用的无线拨的号。所以在代码中要能同时使用只得绑定网口了,很自然就要用到:
sockfd = socket(AF_INET, SOCK_STREAM, 0);(TCP)
int out = setsockopt(sockfd,SOL_SOCKET,SO_BINDTODEVICE,(char *)&if_ppp0,sizeof(if_ppp0));
if(out!=0)
{
error("setsockopt \n");
printf("*** bindif(%s) failed ! errno is %d,
%s\n",ppp0,errno,strerror(errno));
exit(1);
}
在这个网页可以找到使用的方法:
http://www.linuxidc.com/Linux/2011-02/32226.htm
可以看到我这里绑定的是ppp0 , 用的是TCP协议。
但是一个程序不可能只用到TCP 啊! 还得用到UDP , 所以我用同样的方法创建一个UDP的套接口,也一样的绑定了。
结果:编译的时候没有出错,但是在运行的时候在UDP套接口绑定的时候报错:
*** bindif(ppp0) failed ! errno is 19, No such device(就是上面的绑定失败后的内容)
所以我有个想法: 一个网口是不是只能用下个协议去绑定呢?比如说:ppp0用了TCP绑定了,就不能用UDP绑定了。也不知道我这个想法是不是对的…… 请老师们指点一下……