2012-06-12 6 views
9

errorio.Copy 호출에서 반환되었습니다. 대상으로 소켓 (TCPConn)을 전달했습니다. 원격 호스트는 연결이 끊어지면 연결을 끊을 것이고 그 중 아무 것도받지 못할 것입니다. 드롭이 발생하면깨진 파이프 오류를 필터링합니다.

, 나는이 오류 얻을 :

write tcp 192.168.26.5:21277: broken pipe 

을하지만 모두가 error 인터페이스입니다. 깨진 파이프 오류를 다른 종류의 오류와 어떻게 구별 할 수 있습니까?

if err.Errno == EPIPE... 

답변

12

깨진 파이프 오류는 syscall 패키지에 정의되어 있습니다. 평등 연산자를 사용하여 오류를 syscall의 오류와 비교할 수 있습니다. syscall 오류의 전체 목록은 http://golang.org/pkg/syscall/#constants을 확인하십시오. 페이지에서 "EPIPE"를 검색하면 함께 정의 된 모든 정의 된 오류를 찾을 수 있습니다.

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

당신은 당신이 유형의 주장을 사용할 수 있습니다 (꽤 쓸모가 있지만) 실제의 errno 번호를하고자하는 경우 :이 오류에 대한 구체적인 형식이 어디 있는지 말해하지 않습니다

if e, ok := err.(syscall.Errno); ok { 
    errno = uintptr(e) 
} 
+0

이것은 승자처럼 보입니다. –

+0

syscall.EPIPE 작업과 비교 했습니까? –

+5

예. 또한 먼저 'net.OpError'에 유형을 지정하고 'opErr.Err == syscall.EPIPE'을 비교해야합니다. –

-1

을 모두 갖는 그러나 error 인터페이스 타입 주장 또는 인터페이스에 의해 개최되는 구체적인 유형을 공개하는 유형의 스위치를 수행하기에 충분하다.

+2

개최. –