Go 언어에서 server port 가 열려있는지 확인하는 방법을 알아보자.
net.Dial 함수가 있는데 server 연결이 안되어있으면 바로 err 를 반환한다.
서버가 잠깐동안 멍때리거나 할 수도 있으니 timeout 을 사용하여 할 수 있는 방법을 찾아보니
net.DialTimeout 함수도 있다.
둘 중 필요한 것을 사용하면 된다.
간단한 예제로 443 port 가 열려있는지 확인해보면
package main
import (
"fmt"
"net"
"time"
)
func main() {
host := "www.naver.com"
port := "443"
address := net.JoinHostPort(host, port)
conn, err := net.DialTimeout("tcp", address, 3*time.Second)
if err != nil {
fmt.Println(err)
}
if conn != nil {
defer conn.Close()
fmt.Printf("%s:%s is opened!! \n", host, port)
}
}
limjian@Jians-MacBook-Pro-13 go-resty-test % go run main.go
www.naver.com:443 is opened!!
limjian@Jians-MacBook-Pro-13 go-resty-test %
connection 이 연결되어 is opened!! 문구가 출력 된다.
이상한 port 예를들어 4433 으로 테스트를 하면
package main
import (
"fmt"
"net"
"time"
)
func main() {
host := "www.naver.com"
port := "4433"
address := net.JoinHostPort(host, port)
conn, err := net.DialTimeout("tcp", address, 3*time.Second)
if err != nil {
fmt.Println(err)
}
if conn != nil {
defer conn.Close()
fmt.Printf("%s:%s is opened!! \n", host, port)
}
}
timeout 이 3초라서 3초동안 연결되어있는지 확인하고 timeout 에러를 반환한다.
limjian@Jians-MacBook-Pro-13 go-resty-test % go run main.go
dial tcp 223.130.200.107:4433: i/o timeout
limjian@Jians-MacBook-Pro-13 go-resty-test %
localhost 로 테스트 할 때, server port 를 netstat 으로 확인 후
테스트 해보면 더 정확히 판단 할 수 있을 것이다.
'Language > Go' 카테고리의 다른 글
[Go] Covert Time Unix to UTC (1) | 2022.07.20 |
---|---|
[Go] env file ( godotenv ) (0) | 2022.07.06 |
[Go] go resty (net/http) (0) | 2022.07.04 |
[Go] Go version upgrade (change) (0) | 2022.06.05 |
[Go] Jira API (go-jira) (0) | 2022.01.28 |