mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-07-27 23:26:44 +00:00
* initial commit * safe latest error * remove json listener * fix: debug block unit test * remove jsonrpc listener from server * fix: consume network's find port in heimdall client test * update key in log while startup * linters * fix Co-authored-by: Manav Darji <manavdarji.india@gmail.com>
36 lines
587 B
Go
36 lines
587 B
Go
package network
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
"net"
|
|
)
|
|
|
|
const (
|
|
maxPortCheck = 100
|
|
|
|
emptyPort = "127.0.0.1:0"
|
|
)
|
|
|
|
var (
|
|
ErrCantFindAPort = errors.New("no available port found")
|
|
)
|
|
|
|
// FindAvailablePort returns the an available port
|
|
func FindAvailablePort() (int, net.Listener, error) {
|
|
var (
|
|
listener net.Listener
|
|
err error
|
|
)
|
|
|
|
for i := uint(0); i < maxPortCheck; i++ {
|
|
listener, err = net.Listen("tcp", emptyPort)
|
|
if err != nil {
|
|
continue
|
|
}
|
|
|
|
return listener.Addr().(*net.TCPAddr).Port, listener, nil
|
|
}
|
|
|
|
return 0, nil, fmt.Errorf("%w: %s", ErrCantFindAPort, err)
|
|
}
|