2014-12-29 06:46:54 -06:00
|
|
|
package common
|
2014-12-10 08:18:18 -06:00
|
|
|
|
|
|
|
import (
|
|
|
|
"fmt"
|
|
|
|
"log"
|
|
|
|
"net"
|
|
|
|
)
|
|
|
|
|
|
|
|
// FindPort finds and starts listening on a port in the range [portMin, portMax]
|
|
|
|
// returns the listener and the port number on success, or nil, 0 on failure
|
|
|
|
func FindPort(portMin uint, portMax uint) (net.Listener, uint) {
|
|
|
|
log.Printf("Looking for an available port between %d and %d", portMin, portMax)
|
|
|
|
|
|
|
|
for port := portMin; port <= portMax; port++ {
|
|
|
|
log.Printf("Trying port: %d", port)
|
|
|
|
l, err := net.Listen("tcp", fmt.Sprintf(":%d", port))
|
|
|
|
if err == nil {
|
|
|
|
return l, port
|
|
|
|
} else {
|
|
|
|
log.Printf("Port %d unavailable: %s", port, err.Error())
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return nil, 0
|
|
|
|
}
|