43 lines
766 B
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
|
|
}
|