一尘不染

过滤掉破损的管道错误

go

我收到了error一个io.Copy调用返回的消息,已将套接字(TCPConn)作为目标传递给了该调用。可以预期的是,远程主机在它们受够了之后会简单地断开连接,而我不会从他们那里收到任何信息。

发生掉线时,出现以下错误:

write tcp 192.168.26.5:21277: broken pipe

但是我只有一个error接口。我该如何区分折断的管道错误和其他类型的错误?

if err.Errno == EPIPE...

阅读 177

收藏
2020-07-02

共1个答案

一尘不染

断开的管道错误在syscall软件包中定义。您可以使用相等运算符将错误与syscall中的错误进行比较。检查http://golang.org/pkg/syscall/#constants以获取完整的syscall错误列表。在页面上搜索“
EPIPE”,您将发现所有已定义的错误归为一组。

if err == syscall.EPIPE {
    /* ignore */
}

如果您希望获得实际的errno数(尽管它几乎没有用),则可以使用类型断言:

if e, ok := err.(syscall.Errno); ok {
    errno = uintptr(e)
}
2020-07-02