是否有现有的Linux / POSIX C / C ++库或示例代码,用于如何将套接字从一个物理接口重新绑定到另一个物理接口?
例如,我在与物理连接A关联的套接字上ping传输,我想将该套接字重新绑定到物理连接B,并且在连接B上继续发送和接收ping数据包(在短暂的延迟之后)在切换期间。
我只需要这个用于无会话协议。
谢谢
更新
我正在尝试为PPP和以太网设备提供故障转移解决方案。
我有一个基本脚本,可以通过使用iptables,NAT和路由表来完成90%的功能。
问题是当发生故障转移时,ping继续在辅助连接上发送,但是,它们的源IP来自旧连接。
我和一些从事商用路由器工作的人谈过,他们的建议是将套接字重新绑定到辅助接口。
更新2:
我为之前没有详细说明而道歉。此解决方案将在路由器上运行。我无法更改ping程序,因为它将在客户端计算机上运行。我使用ping作为示例,任何非基于会话的连接都应该能够被切换。我在几个商用路由器上测试了这个功能,它确实有效。不幸的是,他们的软件是专有的,但是,通过各种对话和测试,我发现他们在故障转移时重新绑定了套接字。
答案 0 :(得分:3)
从您更新的帖子开始,问题是更改路由信息不会改变ping的源地址,只会强制它出第二个接口。 This answer包含一些相关信息。
您需要更改ping程序。您可以使用每接口套接字方法,并以某种方式通知程序何时进行故障转移。或者您必须关闭套接字然后绑定到第二个接口。
您可以通过几种方式获取所需的接口信息,包括使用SIOCGIFCONF选项调用ioctl()并循环返回的结构以获取接口地址信息。
答案 1 :(得分:0)
我不认为这是一个非常明确的操作。物理接口具有不同的MAC地址,因此除非您有路由层映射它们(NAT等),否则它们将具有不同的IP地址。
端口由<IP addr, Port number, protocol>
的三倍标识,因此如果您的IP地址发生更改,端口将会发生变化。
你真的想在这做什么?
答案 2 :(得分:0)
我完全不确定你要完成什么,但我有一个猜测......你想尝试做某种故障转移吗?如果是这样,那么确实有办法实现这一点,但为什么不在操作系统而不是应用程序中进行呢?
一方面,您可以使用CARP,另一方面,您可以在故障转移模式下使用接口中继/绑定(术语各不相同)。