> 백엔드 개발 > Golang > Go에서 TCP 연결 종료를 어떻게 안정적으로 감지할 수 있나요?

Go에서 TCP 연결 종료를 어떻게 안정적으로 감지할 수 있나요?

Mary-Kate Olsen
풀어 주다: 2024-12-16 07:06:10
원래의
560명이 탐색했습니다.

How Can I Reliably Detect TCP Connection Closure in Go?

Go의 net 패키지에서 TCP 연결 종료 감지

TCP 서버를 구현할 때 클라이언트 연결을 모니터링하는 것이 중요합니다. 클라이언트가 연결을 닫았는지 확인하려면 읽기/쓰기 작업에만 의존하지 않는 것이 중요합니다. 대신, 포괄적인 접근 방식이 권장됩니다.

선호 방법:

"TCP 연결이 닫혔는지 확실하게 감지하는 가장 좋은 방법" 스레드에서는 다음의 조합을 사용할 것을 제안합니다. SetReadDeadline() 및 Read() 함수:

one := make([]byte, 1)
c.SetReadDeadline(time.Now())
if _, err := c.Read(one); err == io.EOF {
  // Client has closed the connection
  c.Close()
  c = nil
} else {
  c.SetReadDeadline(time.Now().Add(10 * time.Millisecond))
}
로그인 후 복사

읽기 작업에 대한 시간 초과를 설정하여 io.EOF 오류에 따라 연결이 닫힙니다.

시간 초과 감지:

읽기 작업 중에 시간 초과가 발생하는 경우 Go 문서에서 지침을 제공합니다.

if neterr, ok := err.(net.Error); ok && neterr.Timeout() {
  // Handle timeout
}
로그인 후 복사

Go 1.7 업데이트 :

Go 버전 1.7 이상에서는 0바이트 읽기가 오류 없이 즉시 반환된다는 점에 주목할 가치가 있습니다. 따라서 최소한 1바이트를 읽었는지 확인하는 것이 중요합니다.

결론적으로 SetReadDeadline(), Read() 및 처리 시간 초과와 관련된 강력한 접근 방식을 사용하면 Go의 넷 패키지에서 TCP 연결 종료를 안정적으로 감지할 수 있습니다.

위 내용은 Go에서 TCP 연결 종료를 어떻게 안정적으로 감지할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿