我有一个简单的程序,它将程序的 stdin、stdout 和 stderr 连接到一个套接字,就像这样,
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{}
我有两个问题,
- 我必须通过执行
select{}
让这两个 goroutine 保持运行
- 当套接字断开连接时,无法通知它。如果发生这种情况,我需要终止
select{}
循环。
有什么想法吗?
最佳答案
如果连接关闭,io.Copy()
会返回(0, io.EOF)
,所以你可以查看。
关于sockets - io.复制: How to know if a socket is closed or disconnected,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42945086/