获取广播地址使用系统调用(如ioctl()或getifaddrs()的好习惯,还是因为以下两个原因而被废弃/无用?
我正在使用一些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 addr或ifconfig等命令输出的指示。