2016-10-28 5 views
2

Ich führe einen Bash-Befehl, um einen Server im Hintergrund zu starten: "./starServer &" Allerdings benötigt mein Server ein paar Sekunden zum Starten. Ich frage mich, was ich tun kann, um den Port, auf dem es läuft, ständig zu überprüfen, um sicherzustellen, dass es läuft, bevor ich weitermache und andere Dinge mache. Ich konnte nichts in der Golang API finden, die mir dabei geholfen hat. Jede Hilfe wird geschätzt!Kontinuierlich überprüfen, ob der TCP-Port verwendet wird

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

Machen Sie den Prozess in der Shell nicht im Hintergrund, es wird nur so gemacht, dass Sie nicht auf den Child-Prozess warten können. Entweder haben Sie Ihr Serversignal, sobald es an den Port gebunden ist, oder Sie müssen die Verbindung erneut versuchen, bis es funktioniert. – JimB

Antwort

3

könnten Sie an den Anschluss an net.DialTimeout oder net.Dial verwenden und erfolgreich, wenn sie sofort schließen. Sie können dies in einer Schleife tun, bis es erfolgreich ist.

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

Eine einfache kleine Bibliothek (ich schrieb) für einen ähnlichen Zweck auch von Interesse sein könnte: portping.

+0

Danke, Janos! Das obige ist genau das, was ich implementieren wollte! – Mosinel

Verwandte Themen