util/port.go

43 lines
766 B
Go

package util
import (
"fmt"
"net"
"time"
)
func TcpPortIsOpen(ip, port string) bool {
conn, err := net.DialTimeout("tcp", fmt.Sprintf("%s:%s", ip, port), 15*time.Second)
if err != nil {
return false
}
defer func() { _ = conn.Close() }()
return true
}
func TcpPortIsOpenByAddr(ipPort string) bool {
conn, err := net.DialTimeout("tcp", ipPort, 15*time.Second)
if err != nil {
return false
}
defer func() { _ = conn.Close() }()
return true
}
func GetAvailablePort() (int, error) {
addr, err := net.ResolveTCPAddr("tcp", "localhost:0")
if err != nil {
return 0, err
}
l, err := net.ListenTCP("tcp", addr)
if err != nil {
return 0, err
}
defer func(l *net.TCPListener) {
_ = l.Close()
}(l)
return l.Addr().(*net.TCPAddr).Port, nil
}