github.com/jfrazelle/docker@v1.1.2-0.20210712172922-bf78e25fe508/libnetwork/portallocator/portallocator_linux.go (about)

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