听取" 0.0.0.0:80"有什么区别?和":80"?

时间:2018-03-02 10:22:01

标签: http go port

当我们使用http.ListenAndServe时,有什么区别:

http.ListenAndServe("0.0.0.0:80", nil)

http.ListenAndServe(":80", nil)

?两个版本都不会侦听端口80上的所有接口吗?

1 个答案:

答案 0 :(得分:6)

http.ListenAndServe()函数最终调用net.Listen()net.Listen的文档声明它将绑定到提供给它的网络:

  

对于TCP网络,如果address参数中的主机为空或文本未指定的IP地址,则Listen会侦听本地系统的所有可用单播和任播IP地址。要仅使用IPv4,请使用网络“tcp4”。

但是,查看http.ListenAndServe()的来源,我们可以看到它将"tcp"指定为网络,而不是"tcp4"。因此,示例代码中的调用应该导致相同的行为,即两个调用都应该绑定到所有可用的接口。但是,进一步深入golang源代码我们最终在internetAddrList()中,我们可以看到它区分了一个空的host值和一个指定了ipv4地址的值。因此golang确实将指定的ipv4地址视为仅在该接口上绑定的指示。