当我们使用http.ListenAndServe https://golang.org/pkg/net/http/#ListenAndServe,有什么区别:
http.ListenAndServe("0.0.0.0:80", nil)
and
http.ListenAndServe(":80", nil)
?两个版本不会监听端口上的所有接口吗80
?
The http.ListenAndServe() https://golang.org/pkg/net/http/#ListenAndServe函数最终调用net.Listen() https://golang.org/pkg/net/#Listen。的文档net.Listen
声明它将绑定到提供给它的网络:
对于 TCP 网络,如果地址参数中的主机为空或字面上未指定的 IP 地址,则 Listen 将侦听本地系统的所有可用单播和任播 IP 地址。要仅使用 IPv4,请使用网络“tcp4”。
然而,查看源码http.ListenAndServe() https://golang.org/src/net/http/server.go?s=83053:83087#L2702我们可以看到它指定了"tcp"
作为网络而不是"tcp4"
。因此,示例代码中的调用应导致相同的行为,即两个调用应绑定到所有可用接口。然而,进一步深入研究 golang 源代码,我们最终会发现internetAddrList() https://golang.org/src/net/ipsock.go#L235我们可以看到它区分了空host
值和指定了 ipv4 地址的值。因此,golang 实际上将指定的 ipv4 地址视为仅绑定在该接口上的指示。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)