> 백엔드 개발 > Golang > Go의 `net` 패키지에서 TCP 연결 종료를 어떻게 감지할 수 있나요?

Go의 `net` 패키지에서 TCP 연결 종료를 어떻게 감지할 수 있나요?

Susan Sarandon
풀어 주다: 2024-12-16 21:52:15
원래의
648명이 탐색했습니다.

How Can I Detect TCP Connection Closure in Go's `net` Package?

Net 패키지를 사용하여 TCP 연결 종료를 결정하는 방법

문제:

구현 시 TCP 서버에서는 클라이언트가 언제 연결을 닫는지 아는 것이 중요합니다. net 패키지를 사용하여 이를 어떻게 확인할 수 있습니까?

답변:

닫힌 TCP 연결을 감지하려면 다음 방법을 사용할 수 있습니다.

one := make([]byte, 1)
c.SetReadDeadline(time.Now())
if _, err := c.Read(one); err == io.EOF {
  // Connection closed
} else {
  // Connection still open
}
로그인 후 복사

이 접근 방식에는 다음이 포함됩니다.

  1. 싱글바이트 버퍼 생성 (1).
  2. 연결의 읽기 기한을 (c) 현재 시간으로 설정하여 강제로 즉시 읽습니다.
  3. 연결에서 바이트를 읽는 중입니다.
  4. 확인하는 중입니다. 오류; io.EOF라면 연결이 종료된 것입니다.

타임아웃 감지:

타임아웃을 감지하려면 오류가 네트인지 확인할 수 있습니다. 시간 초과 오류가 발생했습니다.

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

업데이트(Go 1.7 ):

Go 1.7에서는 0바이트 읽기가 즉시 반환되며 오류가 발생하지 않습니다. 이를 설명하려면 최소한 1바이트를 읽어야 합니다.

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

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