C++ 客户端软件c/c++;插座多接口(连接?)

C++ 客户端软件c/c++;插座多接口(连接?),c++,networking,multicast,bsd,C++,Networking,Multicast,Bsd,硬件:1)网络控制器:高通Atheros QCA6174 802.11ac无线网络适配器(版本32) 2) 以太网控制器:瑞泰半导体有限公司RTL8111/8168/8411 PCI Express千兆以太网控制器(版本12) 操作系统:Linux mint肉桂18.3 64位(基于Ubuntu);内核:Linux内核4.10.0-38-generic gcc(Ubuntu 5.4.0-6ubuntu1~16.04.9)5.4.0 20160609 我做了一些关于在程序中使用多个接口的研究。根据

硬件:1)网络控制器:高通Atheros QCA6174 802.11ac无线网络适配器(版本32) 2) 以太网控制器:瑞泰半导体有限公司RTL8111/8168/8411 PCI Express千兆以太网控制器(版本12) 操作系统:Linux mint肉桂18.3 64位(基于Ubuntu);内核:Linux内核4.10.0-38-generic gcc(Ubuntu 5.4.0-6ubuntu1~16.04.9)5.4.0 20160609

我做了一些关于在程序中使用多个接口的研究。根据最流行的指南之一(示例字段),这一定很容易。但若即使在使用SO_BINDTODEVICE设置SocketOpt后有线连接仍然可用,则socket仍将继续使用有线连接。如果可以创建一个使用多个接口的程序,有人有想法吗?或者那一定是两个不同的程序和linux路由命令

全局目的是创建一个客户端-服务器多播流软件,其中客户端负载平衡和恢复接口功能将可用


如果有任何方法可以解决这些问题,我将很高兴看到。

在我的软件中,我在所有网络接口上进行多播,我为每个网络接口创建一个套接字,并使用select()多路传输I/O。我发现这比只使用一个套接字处理所有网络设备要好。(这确实意味着您的程序需要在新接口联机时作出反应,打开一个新套接字来处理新接口,并且需要在现有接口脱机时作出反应,关闭与当前脱机接口关联的套接字)我为每个网络接口创建一个套接字。请您详细描述一下,据我所知,使用SO_BINDTODEVICE的setsocketopt应该可以,但我的设备不能。我唯一使用的setsocketopt()用于发送,以确保套接字在正确的接口上发送:
struct inaddr in;in.s_addr=[…];setsockopt(fd,IPPROTO_IP,IP_MULTICAST_IF,&in,sizeof(in))
用于IPv4套接字,而
int scopeID=[…];用于IPV6套接字的setsockopt(fd、IPPROTO_IPV6、IPV6_MULTICAST_IF、&scopeID、sizeof(scopeID))
。要接收IPv6多播数据包,请确保在将sockaddr_的sin6_scope_id字段传递给bind()之前设置它。