Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Io 过滤出破裂的管道错误_Io_Go_System Calls_Broken Pipe_Epipe - Fatal编程技术网

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