util.go 854 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. package main
  2. import (
  3. "context"
  4. "net"
  5. "time"
  6. )
  7. func Listen(network, address string) (net.Listener, error) {
  8. lc := net.ListenConfig{}
  9. var lastErr error
  10. for i := 0; i < 5; i++ {
  11. l, err := lc.Listen(context.Background(), network, address)
  12. if err == nil {
  13. return l, nil
  14. }
  15. lastErr = err
  16. time.Sleep(time.Millisecond * 200)
  17. }
  18. return nil, lastErr
  19. }
  20. func ListenPacket(network, address string) (net.PacketConn, error) {
  21. var lastErr error
  22. for i := 0; i < 5; i++ {
  23. l, err := net.ListenPacket(network, address)
  24. if err == nil {
  25. return l, nil
  26. }
  27. lastErr = err
  28. time.Sleep(time.Millisecond * 200)
  29. }
  30. return nil, lastErr
  31. }
  32. func TCPing(addr string) bool {
  33. for i := 0; i < 10; i++ {
  34. conn, err := net.Dial("tcp", addr)
  35. if err == nil {
  36. conn.Close()
  37. return true
  38. }
  39. time.Sleep(time.Millisecond * 500)
  40. }
  41. return false
  42. }