环境: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 进程时,端口占用问题又消失了 这到底是怎么一回事,而且这情况不是必现的,是偶尔会出现
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.