实现节点下线功能,优化控制通道和数据通道的连接处理

This commit is contained in:
2025-05-16 16:59:33 +08:00
parent 8a6a4833d4
commit 22f3c37478
7 changed files with 136 additions and 120 deletions

View File

@@ -1,44 +1,5 @@
package utils
import (
"context"
"log/slog"
"net"
"errors"
)
func ChanConnAccept(ctx context.Context, ls net.Listener) chan net.Conn {
ch := make(chan net.Conn)
go func() {
defer close(ch)
for {
conn, err := ls.Accept()
if err != nil {
if errors.Is(err, net.ErrClosed) {
return
}
// 临时错误重试连接
var ne net.Error
if errors.As(err, &ne) && ne.Temporary() {
slog.Debug("临时错误重试")
continue
}
slog.Error("接受连接失败", err)
return
}
// ctx 取消后退出
select {
case <-ctx.Done():
Close(conn)
return
case ch <- conn:
}
}
}()
return ch
}
func WgWait[T WaitGroup](wg T) <-chan struct{} {
ch := make(chan struct{})
go func() {