package server import ( "context" "errors" "net" "sync" "time" ) // 尝试连接到 address, 连接成功后不会发送任何数据 func pingServer(ctx context.Context, address string) error { dialer := net.Dialer{ Timeout: 2*time.Second, } conn, err := dialer.DialContext(ctx, "tcp", address) if err != nil { return err } _ = conn.Close() return nil } // ConnectTest 尝试连接服务器是否连通 func ConnectTest(ctx context.Context, servers []string) error { errs := make(chan error, len(servers)) var wg sync.WaitGroup wg.Add(len(servers)) for _, server := range servers { wg.Go(func() { if err := pingServer(ctx, server); err != nil { errs <- err } wg.Done() }) } wg.Wait() close(errs) var retErr error for err := range errs { retErr = errors.Join(retErr, err) } return retErr }