io.Copy:如何判断套接字是否关闭或断开连接

huangapple go评论74阅读模式
英文:

io.Copy: How to know if a socket is closed or disconnected

问题

我有一个简单的程序,将一个程序的标准输入(stdin)、标准输出(stdout)和标准错误(stderr)连接到一个套接字(socket)上,像这样:

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{}

我有两个问题:

  1. 我必须通过 select{} 来保持这两个 goroutine 运行。
  2. 当套接字断开连接时,没有办法告诉它。如果发生这种情况,我需要终止 select{} 循环。

有什么想法吗?

英文:

I have a simple program that connects a program's stdin, stdout and stderr to a socket, like this,

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{}

I have two problems,

  1. I have to keep these two goroutines running by doing a select{}
  2. When the socket get disconnected, there's no way to tell it. I need to terminate the select{} loop if that happens.

Any ideas?

答案1

得分: 1

如果连接关闭,io.Copy()将返回(0, io.EOF),因此您可以进行检查。

英文:

If connection is closed, io.Copy() will return (0, io.EOF), so you can check it.

huangapple
  • 本文由 发表于 2017年3月22日 15:17:26
  • 转载请务必保留本文链接:https://go.coder-hub.com/42945086.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定