SO_REUSEPORT与多播UDP的使用

时间:2013-08-26 11:26:56

标签: linux sockets udp posix multicast

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

  

有人能告诉我这与多播的交互方式吗?

     

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

     

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

     

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

1 个答案:

答案 0 :(得分:1)

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

您可能会发现此答案有用:Socket options SO_REUSEADDR and SO_REUSEPORT, how do they differ? Do they mean the same across all major operating systems?