LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 790|回复: 5

请问网络编程中如何选择interface?

[复制链接]
发表于 2007-5-21 07:49:35 | 显示全部楼层 |阅读模式
本菜鸟刚刚开始学网络编程,请问各位大侠:
如果我有两块网卡,分别为/dev/eth0和/dev/eth1,要用connect系统调用链接远程计算机,怎么办才能选择通过eth1来建立链接呢?
多谢指点
发表于 2007-5-21 11:10:09 | 显示全部楼层
如果是tcp/ip,你没必要自己选择接口,应该由系统根据路由表自动选择
如果不是tcp/ip,那么是什么?说来听听
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-5-21 12:06:43 | 显示全部楼层
Post by x11
如果是tcp/ip,你没必要自己选择接口,应该由系统根据路由表自动选择
如果不是tcp/ip,那么是什么?说来听听

多谢~
是tcp/ip,我这里有一个比较特殊的应用,不希望系统自动选择,有没有自己选择接口的方法呢?
刚才搜索到一个解决方案,是解决raw的,不知道能不能用在tcp/ip上:
我写的程序使用raw_socket。是不是将socket通过函数bind绑定指定网卡的IP就能通过该网卡发送数据? >>

>>

>>指定网卡发送数据的时候不需要指定网卡IP,只要设置struct ifreg ifr.ifr_name就可以了。

>>例如:

>>    struct ifreq ifr;

>>    fd = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL));

>>    memset(&ifr, 0, sizeof (ifr));

>>    strncpy(ifr.ifr_name, device, sizeof (ifr.ifr_name) -1);

>>    ifr.ifr_name[sizeof(ifr.ifr_name) - 1] = '\0';

>>    if (ioctl(fd, SIOCGIFHWADDR, &ifr) < 0 )

>>    {

>>        snprintf(err_buf, ERRBUF_SIZE,

>>                "SIOCGIFHWADDR: %s", strerror(errno));

>>        return -1;

>>    }
回复 支持 反对

使用道具 举报

发表于 2007-5-22 21:17:25 | 显示全部楼层
可以通过设置路由的办法
回复 支持 反对

使用道具 举报

发表于 2007-5-22 21:18:51 | 显示全部楼层
另外, 你在网上找到的办法应该也是可行的(据我理解)
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-5-23 13:01:05 | 显示全部楼层
Post by rickxbx
另外, 你在网上找到的办法应该也是可行的(据我理解)

多谢指点
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表