【问题标题】:Usage of SO_REUSEPORT with multicast UDPSO_REUSEPORT 与多播 UDP 的使用
【发布时间】:2013-08-26 11:26:56
【问题描述】:

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

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

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

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

tl;dr: 使用多播时是否需要设置 SO_REUSEPORT?

【问题讨论】:

标签: linux sockets udp posix multicast


【解决方案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?

【讨论】:

  • 想确认每个套接字是否会获得数据包的副本?或者数据包将在套接字之间均匀分布?根据提供的链接,似乎UDP数据包将均匀分布。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-25
相关资源
最近更新 更多