util.go 847 B

12345678910111213141516171819202122232425262728293031323334353637383940
  1. // Package ipnet contains helper functions around net and IP
  2. package ipnet
  3. import (
  4. "errors"
  5. "net"
  6. )
  7. var errFailedToCastAddr = errors.New("failed to cast net.Addr to *net.UDPAddr or *net.TCPAddr")
  8. // AddrIPPort extracts the IP and Port from a net.Addr
  9. func AddrIPPort(a net.Addr) (net.IP, int, error) {
  10. aUDP, ok := a.(*net.UDPAddr)
  11. if ok {
  12. return aUDP.IP, aUDP.Port, nil
  13. }
  14. aTCP, ok := a.(*net.TCPAddr)
  15. if ok {
  16. return aTCP.IP, aTCP.Port, nil
  17. }
  18. return nil, 0, errFailedToCastAddr
  19. }
  20. // AddrEqual asserts that two net.Addrs are equal
  21. // Currently only supprots UDP but will be extended in the future to support others
  22. func AddrEqual(a, b net.Addr) bool {
  23. aUDP, ok := a.(*net.UDPAddr)
  24. if !ok {
  25. return false
  26. }
  27. bUDP, ok := b.(*net.UDPAddr)
  28. if !ok {
  29. return false
  30. }
  31. return aUDP.IP.Equal(bUDP.IP) && aUDP.Port == bUDP.Port
  32. }