2016-10-28 45 views
2

我正在運行bash命令以在後臺啓動服務器:「./starServer &」但是,我的服務器需要幾秒鐘才能啓動。我想知道我可以做些什麼來持續檢查它正在運行的端口,以確保它在我實際移動和執行其他事情之前就已啓動。我在golang api中找不到任何有助於此的東西。任何幫助表示讚賞!連續檢查是否正在使用TCP端口

c := exec.Command("/bin/sh", "-c", command) 
err := c.Start() 
if err != nil { 
    log.Fatalf("error: %v", err) 
} 
l, err1 := net.Listen("tcp", ":" + port) 
+0

不要在shell中後臺執行進程,它只會使進程無法正確等待子進程。一旦綁定了端口,服務器就會發出信號,否則您將不得不重新嘗試連接,直到連接完成。 – JimB

回答

3

你可以連接到使用net.DialTimeoutnet.Dial端口,如果成功,立即將其關閉。您可以循環執行此操作直至成功。

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

一個簡單的小庫(我寫的),出於類似的目的也可能會感興趣:portping

+0

謝謝,Janos!以上正是我期待實現的! – Mosinel