gpt4 book ai didi

go - conn.Read 在通过其他 go 例程关闭 conn 时进入无限循环

转载 作者:数据小太阳 更新时间:2023-10-29 03:35:22 29 4
gpt4 key购买 nike

我的代码有点复杂,但简单来说,它有多个 go 例程,所有都调用不同的 TCP 服务器,并在流中出现可读消息时在 for 循环中读取输入。到目前为止,一切都很好。现在有另一个 go 例程来管理之前的一堆“客户端”并在用户需要时关闭它们。为此,我将每个“conn”与适当的 go routine 客户端相关联并关闭它。

我面临的问题是,只要我调用任何 conn 对象的 close 函数,其对应的 Read 函数就会进入无限循环,不断读取空字符串。

我写了一个简单的代码,类似于我在多个 go 例程中处理连接的方式- https://play.golang.org/p/wq7zt9Kqz7

长话短说

简而言之,我有一个“类”,它代表一个远程服务器及其地址、conn、 WaitGroup ,我正在创建它的多个实例并在单独的 go 例程中处理它们的输入。在另一个 go 例程中,我试图关闭其中一个实例,并且这个 read() 无限期地进入循环。

最佳答案

Read 在关闭的连接上返回错误。

如果 TCP 连接上的 Read 返回任何错误,应用程序应该跳出读取循环。错误中断处理所有这些情况:应用程序关闭另一个 goroutine 中的连接,对等方关闭连接,网络错误。

不需要其他同步来协调 TCP 连接的关闭器和该连接上的读取器。

关于go - conn.Read 在通过其他 go 例程关闭 conn 时进入无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42171951/

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