优化数据连接处理逻辑,避免数据通道连接空等待问题;授权部分添加全局白名单支持;现在节点丢失连接后不会清空授权数据
This commit is contained in:
33
edge/edge.go
33
edge/edge.go
@@ -118,7 +118,6 @@ func ctrl(ctx context.Context, id int32, host string) error {
|
||||
case <-ctx.Done():
|
||||
return
|
||||
case tick := <-ticker.C:
|
||||
slog.Debug("发送心跳", "time", tick)
|
||||
err := sendPing(conn)
|
||||
if err != nil {
|
||||
slog.Error("发送心跳失败", "time", tick, "err", err)
|
||||
@@ -225,20 +224,40 @@ func data(proxy string, dest string, tag [16]byte) error {
|
||||
return dstErr
|
||||
}
|
||||
|
||||
var waitSrc = make(chan error)
|
||||
go func() {
|
||||
defer utils.Close(dst)
|
||||
_, err := io.Copy(dst, src)
|
||||
if err != nil && !errors.Is(err, net.ErrClosed) {
|
||||
slog.Error("上行流量代理失败", "err", err)
|
||||
switch {
|
||||
case errors.Is(err, net.ErrClosed):
|
||||
slog.Debug("网关连接意外关闭")
|
||||
case err != nil:
|
||||
slog.Error("读取网关数据失败", "err", err)
|
||||
default:
|
||||
slog.Debug("网关数据读取完成")
|
||||
}
|
||||
waitSrc <- err
|
||||
}()
|
||||
|
||||
var waitDst = make(chan error)
|
||||
go func() {
|
||||
defer utils.Close(src)
|
||||
_, err := io.Copy(src, dst)
|
||||
if err != nil && !errors.Is(err, net.ErrClosed) {
|
||||
slog.Error("下行流量代理失败", "err", err)
|
||||
switch {
|
||||
case errors.Is(err, net.ErrClosed):
|
||||
slog.Debug("目标连接意外关闭")
|
||||
case err != nil && !errors.Is(err, net.ErrClosed):
|
||||
slog.Error("读取目标数据失败", "err", err)
|
||||
default:
|
||||
slog.Debug("目标数据读取完成")
|
||||
}
|
||||
waitDst <- err
|
||||
}()
|
||||
|
||||
// 等待任意一方关闭数据连接
|
||||
select {
|
||||
case <-waitSrc:
|
||||
case <-waitDst:
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user