eri*_*ork 46 networking tcp strace
我们正在本地主机上提供一个端口,如果该端口可用,我们希望检查另一个进程。由于我们代码中的一个错误,它实际上是在尝试连接到 IP 0.0.0.0:<port>,并且由于某种原因它成功了——正如 strace 所证明的那样:
[...]
connect(3, {sa_family=AF_INET, sin_port=htons(10002), sin_addr=inet_addr("0.0.0.0")}, 16) = 0
[...]
Run Code Online (Sandbox Code Playgroud)
这是什么意思?为什么有效?
Ste*_*itt 75
0.0.0.0 作为目标地址以各种方式指代不可路由的主机或“此主机”。实际上连接到 0.0.0.0 相当于连接到 localhost。(严格来说它不能作为目的地址,只能作为源地址,但实践与理论不符。)
绑定时,“此主机”扩展为“此主机上的任何地址”——因此应用程序通常通过绑定到 0.0.0.0 来接受连接,这意味着它们将接收寻址到系统上任何 IPv4 地址的数据包。