求助, go 端口占用的问题

查看 74|回复 4
作者:misaka19000   
环境:ubuntu22.04 go1.20
代码类似于
go func() {
                //开启 websocket 监听
                http.HandleFunc("/", s.handler)
                err := http.ListenAndServe("0.0.0.0:9999", nil)
                if err != nil {
                        logger.Log.Fatal(fmt.Sprintf("err=%v", err))
                }
        }()
但是有时候启动会报错,显示err=listen tcp 0.0.0.0:9999: bind: address already in use
然而我使用netstat -tuln |grep 9999时,却显示这个端口没被占用
于是我写一个脚本
#!/bin/bash
while true; do
  netstat -tuln |grep 9999
  sleep 0.1
done
一直开着,再写一个守护脚本当 go 进程结束时自动重启
然后我发现 go 进程因为端口占用问题已经重启了几十次,但是端口扫描的脚本却一次显示端口被占用的情况都没有
但是当我过几个小时再次重启 go 进程时,端口占用问题又消失了
这到底是怎么一回事,而且这情况不是必现的,是偶尔会出现

err, 端口, 占用

daniel8642   
各位大哥有没有解决的思路可以说一说
imherer   
写个其它语言的代码看看能不能监听这个端口
daniel8642   
0.0.0.0:9999
可以试试填写一下需要绑定到的网卡 ip 地址。
之前在 wsl2 上出现绑定之后访问不了,就是通过填写 ip 解决的。
daniel8642   
会不会是你这个函数被多次调用了?
您需要登录后才可以回帖 登录 | 立即注册

返回顶部