gpt4 book ai didi

sockets - 绑定(bind)多播 (UDP) 套接字意味着什么?

转载 作者:行者123 更新时间:2023-12-03 05:33:53 24 4
gpt4 key购买 nike

我在具有多个网络接口(interface)的主机之间使用多播 UDP。我正在使用 boost::asio,并且对接收者必须进行的 2 个操作感到困惑:绑定(bind),然后加入组。

当您对加入的每个多播组执行此操作时,为什么需要在绑定(bind)期间指定接口(interface)的本地地址?

妹妹的问题是关于多播端口的:既然在发送过程中,你发送到多播地址和端口,为什么在订阅多播组时,你只指定地址,而不指定端口——端口是在令人困惑的绑定(bind)调用。

注意:“join-group”是 setsockopt(IP_ADD_MEMBERSHIP) 的包装器,如文档所述,可以在同一套接字上多次调用它来订阅不同的组(通过不同的网络? )。因此,每次订阅组时放弃绑定(bind)调用并指定端口是非常有意义的。

据我所知,在加入组时始终绑定(bind)到“0.0.0.0”并指定接口(interface)地址,效果非常好。困惑。

最佳答案

在接收多播时绑定(bind) UDP 套接字意味着指定从中接收数据的地址和端口(不是本地接口(interface),如 TCP 接受器绑定(bind)的情况)。在这种情况下指定的地址具有过滤作用,即套接字将仅接收发送到该多播地址和端口的数据报,无论套接字随后加入什么组。这解释了为什么当绑定(bind)到 INADDR_ANY (0.0.0.0) 时,我收到了发送到我的多播组的数据报,而当绑定(bind)到任何本地接口(interface)时,我没有收到任何内容,即使数据报是在该接口(interface)发送到的网络上发送的对应。

引自 UNIX® 网络编程卷 1,第三版:W.R Stevens 的套接字网络 API。21.10。发送和接收

[...] We want the receiving socket to bind the multicast group and port, say 239.255.1.2 port 8888. (Recall that we could just bind the wildcard IP address and port 8888, but binding the multicast address prevents the socket from receiving any other datagrams that might arrive destined for port 8888.) We then want the receiving socket to join the multicast group. The sending socket will send datagrams to this same multicast address and port, say 239.255.1.2 port 8888.

关于sockets - 绑定(bind)多播 (UDP) 套接字意味着什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10692956/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com