2016-10-28 9 views
2

私はバックグラウンドでサーバを起動するためのbashコマンドを実行しています: "./starServer &"しかし、私のサーバは起動に数秒かかります。私は、私が実際に移動して他のことをする前に、実行中のポートを確認し続けるために何ができるのだろうかと思っています。私はこれを助けたゴラン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

シェルでプロセスをバックグラウンドにしないでください。それは、子プロセスを正しく待つことができないようにするだけです。ポートにバインドされたサーバー信号を送信するか、接続が確立するまで接続を再試行する必要があります。 – JimB

答えて

3

あなたはnet.DialTimeoutまたはnet.Dialを使用してポートに接続し、成功した場合は、すぐにそれを閉じことができます。成功するまでループでこれを行うことができます。

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

も興味があるかもしれない同様の目的のために、単純な小さな図書館(私が書いた):portping

+0

ありがとう、ヤノス!上記はまさに私が実装しようとしていたものです! – Mosinel

関連する問題