Golang-UDP连接关闭时,优雅地停止ReadFromUDP

Golang-UDP连接关闭时,优雅地停止ReadFromUDP,go,udp,Go,Udp,因此,我们有一个全双工系统设置,它利用通道和不同的goroutine进行UDP数据包处理(读、写、处理)。因此,在等待goroutine中的传入数据包时,我们在ReadFromUDP处阻塞 我们有一个特殊的问题,即ReadFromUDP在等待数据包到达时抛出一个错误(显然),而连接正在其他地方关闭 打印的错误如下所示: 阅读udp 127.0.0.1:8091:使用封闭网络连接 这是非常合理的,因为我们实际上通过通道关闭了另一个goroutine中的连接 有没有人知道在发生这种情况时,是否存在一

因此,我们有一个全双工系统设置,它利用通道和不同的goroutine进行UDP数据包处理(读、写、处理)。因此,在等待goroutine中的传入数据包时,我们在
ReadFromUDP
处阻塞

我们有一个特殊的问题,即
ReadFromUDP
在等待数据包到达时抛出一个错误(显然),而连接正在其他地方关闭

打印的错误如下所示:

阅读udp 127.0.0.1:8091:使用封闭网络连接

这是非常合理的,因为我们实际上通过通道关闭了另一个goroutine中的连接


有没有人知道在发生这种情况时,是否存在一种不获取错误的方法(除了捕获错误之外),或者是否存在另一种方法来发出信号
ReadFromUDP
停止读取,而不使用超时?

Eh,hacky,但是您可以对该字符串进行检查,如果发现错误,可以使用一个函数返回自定义错误“使用关闭的网络连接”,如果字符串不匹配,则返回原始错误。然后可以检查err!=CustomErr{}.是的,我们也想到过类似的事情,但正如你所说的,这有点不对劲;)你不能解决这个错误。你在读取操作进行时关闭了连接。要确定这个错误是否正常,你需要某种标志,告诉你的代码连接正常关闭,读取操作中的错误应该被忽略。你不知道吗在这种情况下,se超时。使用错误。记住,错误是值,应该以这种方式使用,也就是说,应该在实际的程序逻辑中使用。现在我们实际上使用错误加上一个信号通道(如您所写)来确定是否可以关闭或是否应该继续。但我们正在寻找一个更“健壮”的替代方案“除了比较错误字符串之外的其他方法。为什么需要比较字符串?首先,网络错误包含了它发生的原因。其次,您的代码知道您关闭了连接,这意味着读取操作中的任何错误都应该被忽略。在这两种情况下都不需要错误字符串。