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