测试用例代码如下
并发发起2000个连接会出现 accept卡死的情况
只有drawin和linux系统会有这个问题,windows正常
```golang
func TestStressConn3(t *testing.T) {
const max = 2000
var number = 0
l, _ := net.Listen("tcp4", "127.0.0.1:9003")
wg := sync.WaitGroup{}
wg.Add(max)
for i := 0; i < max; i++ {
go func() {
t.Log("start conn")
net.Dial("tcp4", "127.0.0.1:9003")
t.Log("end conn")
}()
}
go func() {
for {
number++
fmt.Println("accept", time.Now().String())
l.Accept()
fmt.Println("end", time.Now().String(), number)
wg.Done()
}
}()
tm := time.Now()
wg.Wait()
t.Log("用时", time.Now().Sub(tm).Seconds())
}
```
单进程最多打开文件数已经设置到10240了,之前有到过最大句柄数,所以提前有设置。达到最大句柄会报错open many files。但是这个用例没有报错,直接卡在了中间
#2
更多评论
<a href="/user/dp1993132" title="@dp1993132">@dp1993132</a> 同样的用例,在我的系统上没有问题。archlinux, go1.13.5。tcpdump监控下tcp握手的情况,看看有没有头绪
#3