我正在使用UDP组播库,并且遇到有关如何正确处理链接故障,NIC电缆断开/重新连接等问题。
在我的测试中,我具有以下设置:
2个服务器sA和sB
sA正在发送UDP多播数据,而sB正在接收多播数据
服务器通过第2层思科千兆交换机连接
例如,当我在sB上加入多播组时,我开始从sA的多播数据包在该套接字上接收数据。
现在,当我禁用/拔下绑定了多播接收器sB的NIC时,我不会
接收到任何套接字级别的错误(例如Socket.ReceiveAsync中的错误),我猜这是可以预期的,因为UDP是无连接的,但是我希望我能得到某种通知/异常,因为多播接收者绑定的IP变得不可用。
无论如何,当我重新启用该NIC时,尽管发件人仍在同一多播组上进行发送,但我再也没有收到任何数据。
我希望内核可以在硬件链接失败后实际处理重新加入多播组的问题,但看起来并没有。但是,由于我也没有收到任何套接字级别错误,因此我真的不知道如何检测多播接收器的链接故障吗?
是否需要设置某些套接字选项,以便内核重新加入多播组?
到目前为止,我想到的唯一选择是监听System.Net.NetworkInformation.NetworkChange.NetworkAddressChanged事件,并在收到必须绑定到的本地IP的通知后再次尝试重新绑定。
其他多播应用程序如何处理这种情况?
谢谢,
汤姆
最佳答案
我建议您订阅以下事件:System.Net.NetworkInformation.NetworkChange.NetworkAvailabilityChanged
要解决可用网络何时脱机的问题,请设计事件处理程序以适当地重置接收器。相反,如果网络可用,则重新绑定接收器。
关于c# - C#UDP多播套接字-如何处理链接失败,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1474544/