在Java中绑定到0.0.0.0是否保证绑定到所有网络接口?

我从经验上发现了这一点

Endpoint endpoint1 = Endpoint.create(new Ping()); endpoint1.publish("http://0.0.0.0:8080/ws/ping"); 

绑定到当前计算机上的所有网络接口(而不仅仅是localhost – 127.0.0.1或主机名),但我无法找到说明这是有保证的文档。

问题:在Java中定义绑定到0.0.0.0将始终绑定到所有网络接口?

使用0.0.0.0将仅绑定到启用IPv4的接口。 但是,如果绑定到:: ,应该涵盖所有IPv4和IPv6接口,假设您的TCP / IP堆栈(和Java)启用了IPv4兼容的IPv6套接字。

你需要查看内核(或套接字库,如果你在Windows上),以解释“为什么”。 在我的OS X系统上, man页解释了它。

来自man 4 inet

可以使用本地地址INADDR_ANY创建套接字,以对传入消息实现“通配符”匹配。 connect(2)sendto(2)调用中的地址可以作为INADDR_ANY给出,表示“此主机”。 如果配置的第一个网络支持广播,则允许区分地址INADDR_BROADCAST作为主网络上广播地址的简写。

男人4 inet6

可以使用本地地址’::’(等于IPv6地址0:0:0:0:0:0:0:0)创建套接字,以影响对传入消息的“通配符”匹配。

它与Java无关。 0.0.0.0是INADDR_ANY,它是一个特殊地址,保证由C套接字API 任何网络接口接收,由Java调用。

它似乎是一种特殊的保留IP地址。 此链接可能有更多信息是0.0.0.0有效的IP地址? 。 所以我怀疑它没有在Java中记录,因为它与实际的网络规范更相关。

正如其他一些人所提到的,它似乎是查克诺里斯的IP地址:D

HTH