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