2017-03-22 10 views
-1

を切断し、私はこのように、ソケットにプログラムの標準入力、標準出力と標準エラー出力を接続する簡単なプログラムを持って、io.Copy:どのようにソケットが閉じているかどうかを知るや

go func() { 
    defer conn.Close(); 
    defer stdin.Close(); 

    io.Copy(stdin, conn); 
}(); 

go func() { 
    defer conn.Close(); 
    defer stdout.Close(); 
    defer stderr.Close(); 

    io.Copy(conn, stdout); 
    io.Copy(conn, stderr); 
}(); 

select{} 

私は2つの問題を抱えています、

  1. 私はソケットが切断取得する場合、それを伝える方法はありませんselect{}
  2. を行うことによって実行されているこれら二つのゴルーチンを維持する必要があります。その場合はループを終了する必要があります(select{})。

+0

「ソケットが閉じています」と「ソケットが切断されました」の違いがあります。あなたは何について尋ねていますか? – EJP

+0

@EJPどういう意味ですか?もし接続が切断されていれば、それは閉じていますが、私はそれを取得しません... – daisy

+0

いいえ、接続が切断されていても、それを読み、ストリームの終わりを取得したり、 *あなたがそれを閉じるときに閉じられるだけです。 – EJP

答えて

1

接続が閉じている場合、io.Copy()(0, io.EOF)を返すので、確認できます。

関連する問題