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 중국어 웹사이트의 기타 관련 기사를 참조하세요!