portallocator_linux.go 844 B

123456789101112131415161718192021222324252627
  1. package portallocator
  2. import (
  3. "bufio"
  4. "fmt"
  5. "os"
  6. )
  7. func getDynamicPortRange() (start int, end int, err error) {
  8. const portRangeKernelParam = "/proc/sys/net/ipv4/ip_local_port_range"
  9. portRangeFallback := fmt.Sprintf("using fallback port range %d-%d", defaultPortRangeStart, defaultPortRangeEnd)
  10. file, err := os.Open(portRangeKernelParam)
  11. if err != nil {
  12. return 0, 0, fmt.Errorf("port allocator - %s due to error: %v", portRangeFallback, err)
  13. }
  14. defer file.Close()
  15. n, err := fmt.Fscanf(bufio.NewReader(file), "%d\t%d", &start, &end)
  16. if n != 2 || err != nil {
  17. if err == nil {
  18. err = fmt.Errorf("unexpected count of parsed numbers (%d)", n)
  19. }
  20. return 0, 0, fmt.Errorf("port allocator - failed to parse system ephemeral port range from %s - %s: %v", portRangeKernelParam, portRangeFallback, err)
  21. }
  22. return start, end, nil
  23. }