在关于SO_REUSEPORT的讨论中,以下问题已发布到reddit,但没有答案。我想知道Stack Overflow是否知道答案。
有人能告诉我这与多播的交互方式吗?
我有一个程序应该监听多播UDP消息的应用程序,并且该程序可能在同一台计算机上多次启动。当收到消息时,所有的监听过程都应该得到它。
我注意到在Linux上,如果我没有设置SO_REUSEPORT,它可以正常工作,如果我理解正确,设置SO_REUSEPORT可能是错误的做法 - 我不希望在进程之间分配UDP消息,我希望所有流程都能获得副本。但是,在OS X上,除非设置了SO_REUSEPORT,否则程序的第二次执行将无法找到空闲端口。
tl; dr:使用多播时是否应该设置SO_REUSEPORT?
答案 0 :(得分:1)
使用SO_REUSEPORT,可以将多个套接字绑定到同一个端口和地址。唯一的要求是早期的套接字必须设置此选项。因此,如果我们 想要两个套接字,sock1和sock2被绑定到同一个端口(和地址),那么只有当sock1和sock2都设置了SO_REUSEPORT时,s2才能重用端口/地址。关于多播,如果sock1和sock2都是相同多播组的接收者,那么他们都将获得数据副本。