portallocator_linux.go 635 B

12345678910111213141516171819202122232425
  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. file, err := os.Open(portRangeKernelParam)
  10. if err != nil {
  11. return 0, 0, err
  12. }
  13. defer file.Close()
  14. n, err := fmt.Fscanf(bufio.NewReader(file), "%d\t%d", &start, &end)
  15. if n != 2 || err != nil {
  16. if err == nil {
  17. err = fmt.Errorf("unexpected count of parsed numbers (%d)", n)
  18. }
  19. return 0, 0, fmt.Errorf("port allocator - failed to parse system ephemeral port range from %s: %v", portRangeKernelParam, err)
  20. }
  21. return start, end, nil
  22. }