Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Continuously check if tcp port is in use

Tags:

go

I'm running a bash command to start up a server in the background : "./starServer &" However, my server takes a few seconds to start up. I'm wondering what I can do to continuously check the port that it's running on to ensure it's up before I actually move on and do other things. I couldn't find anything in the golang api that helped with this. Any help is appreciated!

c := exec.Command("/bin/sh", "-c", command)
err := c.Start()
if err != nil {
    log.Fatalf("error: %v", err)
}
l, err1 := net.Listen("tcp", ":" + port)
like image 237
Mosinel Avatar asked Oct 28 '16 01:10

Mosinel


1 Answers

You could connect to the port using net.DialTimeout or net.Dial, and if successful, immediately close it. You can do this in a loop until successful.

for {
    conn, err := net.DialTimeout("tcp", net.JoinHostPort("", port), timeout)
    if conn != nil {
        conn.Close()
        break
    }
}

A simple tiny library (I wrote) for a similar purpose might also be of interest: portping.

like image 164
janos Avatar answered Oct 20 '22 19:10

janos