Mat*_*ner 10 io broken-pipe system-calls go epipe
我正在接到error一个io.Copy电话,我已经通过一个socket(TCPConn)作为目的地.预计远程主机只有在足够的时候才会断开连接,而我却没有收到任何连接.
发生丢弃时,我收到此错误:
write tcp 192.168.26.5:21277: broken pipe
Run Code Online (Sandbox Code Playgroud)
但我所拥有的只是一个error界面.如何区分破损的管道错误与其他类型的错误?
if err.Errno == EPIPE...
Run Code Online (Sandbox Code Playgroud)
Ste*_*erg 13
断开的管道错误在syscall包中定义.您可以使用相等运算符将错误与syscall中的错误进行比较.查看http://golang.org/pkg/syscall/#constants以获取系统调用错误的完整列表.在页面上搜索"EPIPE",您会发现所有已定义的错误组合在一起.
if err == syscall.EPIPE {
/* ignore */
}
Run Code Online (Sandbox Code Playgroud)
如果你想获得实际的errno数(虽然它没用),你可以使用类型断言:
if e, ok := err.(syscall.Errno); ok {
errno = uintptr(e)
}
Run Code Online (Sandbox Code Playgroud)
小智 10
从 go 1.13 开始,您可以使用errors.Is而不是类型断言。
if errors.Is(err, syscall.EPIPE) {
// broken pipe
}
Run Code Online (Sandbox Code Playgroud)