我正在开发一个 UDP 多播库,并有一个关于如何正确处理链路故障、断开/重新连接的 NIC 电缆等的问题。
在我的测试中,我有以下设置:
- 2 台服务器 sA 和 sB
- sA 正在发送 UDP 多播数据,而 sB 正在接收多播数据
- 服务器通过第 2 层 Cisco 千兆交换机连接
例如,当我加入 sB 上的多播组时,我开始在该套接字上从 sA 的多播数据包接收数据。
现在,当我禁用/拔出绑定多播接收器 sB 的 NIC 时,我没有收到任何套接字级别错误(例如在 Socket.ReceiveAsync 中),我猜这是预期的,因为 UDP 是无连接的,但我希望我当多播接收器绑定到的 IP 变得不可用时,会收到某种通知/异常。
无论如何,当我重新启用该 NIC 时,尽管发送方仍在同一个多播组上发送,但我不再接收任何数据。我希望内核在硬件链接故障后实际上能够处理重新加入多播组,但看起来它没有。但是,由于我也没有收到任何套接字级别的错误,我真的不知道如何检测多播接收器的链接故障?是否需要设置某些套接字选项,以便内核重新加入多播组?到目前为止,我想出的唯一选择是侦听 System.Net.NetworkInformation.NetworkChange.NetworkAddressChanged 事件,并在收到我必须绑定的本地 IP 再次可用的通知时尝试重新绑定。其他多播应用程序如何处理这种情况?
谢谢,
汤姆