Io 过滤出破裂的管道错误
我收到一个从Io 过滤出破裂的管道错误,io,go,system-calls,broken-pipe,epipe,Io,Go,System Calls,Broken Pipe,Epipe,我收到一个从io.Copy调用返回的错误,我已将套接字(TCPConn)作为目标传递给该调用。预计远程主机在受够了连接后会直接断开连接,而我不会从他们那里收到任何信息 当跌落发生时,我得到以下错误: write tcp 192.168.26.5:21277: broken pipe 但我所拥有的只是一个错误接口。如何区分断管错误和其他类型的错误 if err.Errno == EPIPE... 除了一个错误接口之外,拥有所有接口就足以执行类型断言或类型切换,以显示接口所持有的具体类型。断管错
io.Copy
调用返回的错误,我已将套接字(TCPConn
)作为目标传递给该调用。预计远程主机在受够了连接后会直接断开连接,而我不会从他们那里收到任何信息
当跌落发生时,我得到以下错误:
write tcp 192.168.26.5:21277: broken pipe
但我所拥有的只是一个错误
接口。如何区分断管错误和其他类型的错误
if err.Errno == EPIPE...
除了一个错误
接口之外,拥有所有接口就足以执行类型断言或类型切换,以显示接口所持有的具体类型。断管错误在syscall包中定义。您可以使用相等运算符将错误与syscall中的错误进行比较。检查系统调用错误的完整列表。在页面上搜索“EPIPE”,您将发现所有已定义的错误组合在一起
if err == syscall.EPIPE {
/* ignore */
}
如果您希望获得实际的errno编号(尽管它非常无用),可以使用类型断言:
if e, ok := err.(syscall.Errno); ok {
errno = uintptr(e)
}
从go 1.13开始,您可以使用而不是类型断言
if errors.Is(err, syscall.EPIPE) {
// broken pipe
}
这并没有告诉我这个错误的具体类型在哪里。这看起来像是一个赢家,我会试一试。是的。此外,我必须首先将assert键入net.OpError
,然后比较oper.Err==syscall.EPIPE
。