广播工作,但没有设置广播地址

快速的问题

获取广播地址使用系统调用(如ioctl()getifaddrs()的好习惯,还是因为以下两个原因而被废弃/无用?

  1. 我可以在networking掩码和IP之间build立一个二进制或
  2. 广播地址并不总是设置

细节

我正在使用一些UDP广播代码,在我的Arch Linux机器和一些Ubuntu Docker容器上。

我看到一些接口设置了广播地址,例如我的Arch Linux上的wifi接口(从$ ip addr ):

inet 192.168.0.11/24 brd 192.168.0.255作用域全局wlp4s0

有些则不是,例如Ubuntu Docker容器上的eth0接口:

inet 172.17.0.5/16 scope global eth0

但是,如果我发送数据包到172.17.255.255他们实际上是广播到networking上的其他机器。

在这个问题上有人说,没有必要手动设置广播地址。 在这里 ,有人似乎暗示Docker故意不设置广播地址,由于某种原因,我不承认。

所以我想知道:什么是正确的方式来检测networking接口的广播地址?

看起来广播地址在接口定义中至less是一个“独立的”字段(至less在我试过的一些linux系统上),但是它不应该用于定向广播,因为它可能是未设置的。

如果未设置,通过ioctl()等命令将广播地址错误地读为“0.0.0.0”,最终导致这种情况 。

所以我会再次提到这个问题,并支持广播地址应该从IP和networking掩码计算的想法。 广播地址只应该被认为是ip addrifconfig等命令输出的指示。