2014-07-11 3 views
2

원격 서버에 요청을 보내지 만 응답은 신경 쓰지 않습니다. 그럴 경우 서버가 Broken pipe 오류가 발생하기 때문에 직접 연결을 닫고 싶지 않습니다.Go에서 연결의 들어오는 데이터를 삭제하는 방법은 무엇입니까?

con, _ := net.Dial("tcp", host) 

// ... 

data := make([]byte, 512) 
for { 
    if _, err = con.Read(data); err == io.EOF { 
     break 
    } 
} 

하지만 배쉬 >/dev/null 같은 뭔가를 찾고 있어요 :

읽기에 나는 현재 루프() 버퍼로 호출합니다. ioutils.Discard을 찾았지만 io.Writer이고 con.Read[]byte 버퍼에서만 작동합니다.

내가 현재하고있는 것과 같은 버퍼를 읽는 것보다 효율적인 방법이 있습니까?

답변

7

당신이 io.Writer

func Copy(dst Writer, src Reader) (written int64, err error)

io.Reader에 SRC io.Reader에서이

io.Copy(ioutil.Discard, con) 

io.Copy 사본처럼 ioutil.Discard를 사용해야하는 것은

로 정의하는 인터페이스입니다

io.Writer

type Writer interface { 
     Write(p []byte) (n int, err error) 
} 

net.Connio.Readerioutil.Discard가 정교하게 io.Writer

+0

을 구현 구현 : 'net.Conn'는'io.Writer' 인터페이스를 구현합니다. 이와 같이,'io.Writer'를 기대하는 것으로 넘어갈 수 있습니다. 여기에는'io.Copy' 함수가 포함됩니다. – jimt

+0

정말 고마워! – bfontaine

관련 문제