Linux指定网卡socket发送数据

我们的嵌入式设备(基于Linux)做为数据采集上报,当有多个数据出口,做冗余发送。

两个出口的网络不再分层,均处于同一子网,直接用socket发送即可,系统会按照本地路由表进行匹配发送

## 可以该命令查看本地路由器表
route -n



其中一个数据出口有多层结构,该数据接口可设置“默认网关”。即无法匹配的数据会发送到该数据出口
多层结构,即数据出口外还有路由器设备提供上层的数据出口,数据目的地址不是当前网段

当两个数据均有多层结构,设置“默认网关”,在 etc/config/network 中,文字位置比较靠后的默认网关会起作用,无法达到效果。据说,Windows系统会随机选择一个进行发送
因此,需要将socket与网卡进行绑定发送数据

	#include <net/if.h>

	struct ifreq ifr;
	char NetworkInterface[] = "eth0";
    memset(&ifr, 0x00, sizeof(ifr));
    strncpy(ifr.ifr_name, NetworkInterface, NetworkInterface);
    int err = setsockopt(udp_fd, SOL_SOCKET, SO_BINDTODEVICE, (char *)&ifr, sizeof(ifr));



需要注意的是,setsockopt()的执行需要root权限
 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值