| 1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- 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
- }
|