port.go 440 B

1234567891011121314151617181920212223
  1. package udp
  2. import "github.com/v2fly/v2ray-core/v4/common/net"
  3. // PickPort returns an unused UDP port of the system.
  4. func PickPort() net.Port {
  5. conn := pickPort()
  6. defer conn.Close()
  7. addr := conn.LocalAddr().(*net.UDPAddr)
  8. return net.Port(addr.Port)
  9. }
  10. func pickPort() *net.UDPConn {
  11. conn, err := net.ListenUDP("udp4", &net.UDPAddr{
  12. IP: net.LocalHostIP.IP(),
  13. Port: 0,
  14. })
  15. if err != nil {
  16. conn = pickPort()
  17. }
  18. return conn
  19. }