UDP组播的g_socket_bind行为

时间:2017-01-22 13:45:39

标签: network-programming multicast glib

我在一个系统上有多个读者绑定到一个地址(IP:端口ex.239.0.0.1:1234)。组中的另一台计算机向该组发送UDP组播数据包,读者应该接收它。我使用了GLib 2.0网络堆栈g_socket_bindallow_reuse设置为true

当有一个读卡器(绑定到该地址的单个插槽)或最多三个读卡器时,一切正常,读者将正确接收数据包。但是当读者数量增加到4或者以上时,数据包丢失会随着系统读取器数量的增加而线性增加。

  

如果socket是UDP套接字,则allow_reuse确定是否可以同时将其他UDP套接字绑定到同一地址。特别是,您可以将多个UDP套接字绑定到同一个地址,并且它们都将接收发送到该地址的所有多播和广播数据包。

正如GIO Reference Manual中所述,当allow_reuse设置为true时,所有读者都应该读取所​​有数据,但不会发生如上所述。

有谁知道问题是什么?是否存在与内核相关的问题?

1 个答案:

答案 0 :(得分:1)

所有套接字都需要加入组播组。如果您只是依靠绑定来实现这一点,那么您就会陷入未定义的行为。