今天在看第三方go库源代码的时候,发现有个监听端口0,不太明白其含义:
// Create a listener
l, err := net.Listen("tcp", "127.0.0.1:0")
if err != nil {
t.Fatalf("err: %s", err)
}
从网上找到了答案:端口号 0 有特殊的含义,在unix socket编程当中,端口号 0 是一种由系统指定动态生成的端口。也即是说,监听端口0,系统会自动重新分配一个系统空闲的端口。写个测试代码试试:
package main
import (
"net/http"
)
func main() {
http.ListenAndServe(":0", nil)
}
跑起来,的确是,自动分配了新的端口,在windows10下,分配的端口比较大,5次测试分配的端口都是50000左右的。
网友评论