是否存在现有的Linux / POSIX C/C++库或示例代码,用于如何将套接字从一个物理接口重新绑定到另一个物理接口?
例如,我在与物理连接A关联的套接字上进行ping传输,并且我想将该套接字重新绑定到物理连接B,并让ping数据包继续在连接B上发送和接收(在切换过程中短暂延迟后,过度).
我只需要无会话协议.
谢谢
更新:
我正在尝试提供用于PPP和以太网设备的故障转移解决方案.
我有一个基本脚本,可以通过使用iptables,NAT和路由表来完成90%的功能.
问题是发生故障转移时,ping将继续在辅助连接上发送,但是它们的源IP来自旧连接.
我已经和几个从事商用路由器工作的人交谈过,他们的建议是将套接字重新绑定到辅助接口.
更新2:
抱歉,我没有更详细地说明这一点.该解决方案将在路由器上运行.我无法更改ping程序,因为它将在客户端计算机上运行.我仅以ping为例,不是基于会话的任何连接都应该能够切换.我在几台商用路由器上测试了此功能,并且确实可以使用.不幸的是,他们的软件是专有的,但是,通过各种对话和测试,我发现他们在故障转移时重新绑定了套接字.
解决方法:
在您更新的帖子中,问题在于更改路由信息不会更改ping的源地址,只会将其强制出第二个接口. This answer包含一些相关信息.
您需要更改ping程序.您可以使用每个接口的套接字方法,并以某种方式通知程序何时进行故障转移.否则,您必须关闭套接字,然后绑定到第二个接口.
您可以通过两种方式获取所需的接口信息,包括使用SIOCGIFCONF选项调用ioctl()并循环返回的结构以获取接口地址信息.