gpt4 book ai didi

tcp - Golang 1.5 io.Copy 被两个 TCPConn 阻塞

转载 作者:IT王子 更新时间:2023-10-29 01:59:19 33 4
gpt4 key购买 nike

http://play.golang.org/p/gZo5RqgY4F

我对 io.Copy 方法有疑问。上面的链接将在 Go 1.5 下的第 44 行阻塞。但会在 1.4.2 中通过。我不知道这个问题。

这是我的 go 版本:go version go 1.5 darwin/amd64

io.Copy 是什么时候在 go 1.5 中返回的?

最佳答案

以前,当系统调用的计时会在您的第二个 io.Copy [第 41 行] 中导致写入错误时,您会很幸运。 (忽略错误往往会隐藏错误)

这纯属偶然(甚至可能是不正确的)。由于该副本的源连接 (conn2) 永远不会关闭,因此 io.Copy 永远不会收到 io.EOF 并且不会返回.您需要关闭每个复制 goroutine 中的对立连接,以解锁对方对 io.Copy 的调用。

wg.Add(1)
go func() {
io.Copy(conn1, conn2)
// conn2 has returned EOF or an error, so we need to shut down the
// other half of the duplex copy.
conn1.Close()
wg.Done()
}()

wg.Add(1)
go func() {
io.Copy(conn2, conn1)
conn2.Close()
wg.Done()
}()

关于tcp - Golang 1.5 io.Copy 被两个 TCPConn 阻塞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32460618/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com