我收到了error一个io.Copy调用返回的消息,已将套接字(TCPConn)作为目标传递给了该调用。可以预期的是,远程主机在它们受够了之后会简单地断开连接,而我不会从他们那里收到任何信息。
error
io.Copy
TCPConn
发生掉线时,出现以下错误:
write tcp 192.168.26.5:21277: broken pipe
但是我只有一个error接口。我该如何区分折断的管道错误和其他类型的错误?
if err.Errno == EPIPE...
断开的管道错误在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) }