golang创建web监听在tcp6而非tcp4的解决

2021年3月18日17:09:52Golang评论920阅读模式

在用golang建立web时,不管是用原生库还是使用gin框架,发现服务器起来后最终都会监听到tcp6。查stackoverflow得知,如果想要默认监听tcp4/tcp6需要修改下源码。

修改$GOROOT/src/net/http/server.go

2813行/2842行处函数(视golang版本而定)

func (srv *Server) ListenAndServe() error {
	if srv.shuttingDown() {
		return ErrServerClosed
	}
	addr := srv.Addr
	if addr == "" {
		addr = ":http"
	}
	ln, err := net.Listen("tcp", addr)
	if err != nil {
		return err
	}
	return srv.Serve(ln)
}

修改前这一行:ln, err := net.Listen("tcp", addr)

改完后为:ln, err := net.Listen("tcp4", addr)

然后,再启动服务,成功监听到tcp4。