当我们使用时http.ListenAndServe,有什么区别:
http.ListenAndServe("0.0.0.0:80", nil)
Run Code Online (Sandbox Code Playgroud)
和
http.ListenAndServe(":80", nil)
Run Code Online (Sandbox Code Playgroud)
?两个版本都不会监听端口上的所有接口80吗?
该http.ListenAndServe()函数最终调用net.Listen().net.Listen它将绑定到提供给它的网络的状态的文档:
对于TCP网络,如果address参数中的主机为空或文本未指定的IP地址,则Listen将侦听本地系统的所有可用单播和任播IP地址.要仅使用IPv4,请使用网络"tcp4".
但是,查看源代码http.ListenAndServe()我们可以看到它指定"tcp"为网络而不是"tcp4".因此,示例代码中的调用应该导致相同的行为,即两个调用都应该绑定到所有可用的接口.然而,进一步挖掘golang源代码我们最终会进入internetAddrList(),我们可以看到它区分了一个空host值和一个指定了ipv4地址的值.因此golang确实将指定的ipv4地址视为仅在该接口上绑定的指示.
| 归档时间: |
|
| 查看次数: |
1043 次 |
| 最近记录: |