我们的嵌入式设备(基于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权限