http://play.golang.org/p/gZo5RqgY4F我有一個關(guān)于io.Copy方法的問題。上面的鏈接將在 Go 1.5 下的第 44 行中阻塞。但會在 1.4.2 中通過。我不知道這個問題。這是我的 go 版本:go version go 1.5 darwin/amd64.io.Copygo 1.5 什么時候返回的?
1 回答

慕田峪7331174
TA貢獻(xiàn)1828條經(jīng)驗 獲得超13個贊
以前,當(dāng)系統(tǒng)調(diào)用的時間會導(dǎo)致您的第二個io.Copy[第 41 行]出現(xiàn)寫入錯誤時,您很幸運。(忽略錯誤往往會隱藏錯誤)
這純粹是偶然的(甚至可能是不正確的)。由于該副本 ( conn2)的源連接永遠(yuǎn)不會關(guān)閉,因此io.Copy永遠(yuǎn)不會收到io.EOF并且不會返回。您需要關(guān)閉每個復(fù)制 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()
}()
- 1 回答
- 0 關(guān)注
- 500 瀏覽
添加回答
舉報
0/150
提交
取消