1

在关于 SO_REUSEPORT 的讨论中,将以下问题发布到reddit,但没有答案。我想知道 Stack Overflow 是否知道答案。

谁能告诉我这如何与多播交互?

我有一个应用程序,程序应该在其中侦听多播 UDP 消息,并且该程序可能在同一台计算机上启动多次。当一条消息到来时,所有监听进程都应该得到它。

我注意到在 Linux 上,如果我不设置 SO_REUSEPORT,它可以正常工作,如果我理解正确,设置 SO_REUSEPORT 可能是错误的做法——我不希望在进程之间分发 UDP 消息,我想要获取副本的所有过程。但是,在 OS X 上,除非设置了 SO_REUSEPORT,否则程序的第二次执行无法找到空闲端口。

tl; dr:使用多播时是否应该设置 SO_REUSEPORT?

4

1 回答 1

2

使用 SO_REUSEPORT,可以将多个套接字绑定到同一个端口和地址。唯一的要求是早期的套接字必须设置此选项。因此,如果我们希望将两个套接字 sock1 和 sock2 绑定到同一个端口(和地址),那么只有在 sock1 和 sock2 都设置了 SO_REUSEPORT 时,s2 才能重用端口/地址。对于多播,如果 sock1 和 sock2 都是同一个多播组的接收者,那么它们都将获得数据的副本。

您可能会发现此答案很有帮助:套接字选项 SO_REUSEADDR 和 SO_REUSEPORT,它们有何不同?它们在所有主要操作系统中的含义都相同吗?

于 2013-08-26T17:53:20.607 回答