Heim >Backend-Entwicklung >Golang >Wie kann ich das Schließen einer TCP-Verbindung in Go zuverlässig erkennen?

Wie kann ich das Schließen einer TCP-Verbindung in Go zuverlässig erkennen?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-16 07:06:10565Durchsuche

How Can I Reliably Detect TCP Connection Closure in Go?

Erkennen von TCP-Verbindungsschließungen im Netzpaket von Go

Bei der Implementierung eines TCP-Servers ist die Überwachung von Client-Verbindungen von entscheidender Bedeutung. Um festzustellen, ob ein Client die Verbindung geschlossen hat, ist es wichtig, sich nicht ausschließlich auf Lese-/Schreibvorgänge zu verlassen. Stattdessen wird ein umfassender Ansatz empfohlen.

Bevorzugte Methode:

Der Thread „Bester Weg, um zuverlässig zu erkennen, dass eine TCP-Verbindung geschlossen ist“ schlägt die Verwendung einer Kombination aus vor SetReadDeadline()- und Read()-Funktionen:

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))
}

Durch Festlegen eines Timeouts für den Lesevorgang können Sie basierend auf dem bestimmen, ob die Verbindung geschlossen ist io.EOF-Fehler.

Timeout-Erkennung:

Falls während des Lesevorgangs ein Timeout auftritt, finden Sie in der Go-Dokumentation Anleitungen:

if neterr, ok := err.(net.Error); ok && neterr.Timeout() {
  // Handle timeout
}

Updates in Go 1.7:

Es ist erwähnenswert, dass dies in Go-Versionen der Fall ist 1.7 und höher werden Null-Byte-Lesevorgänge sofort ohne Fehler zurückgegeben. Daher ist es von entscheidender Bedeutung, sicherzustellen, dass mindestens ein Byte gelesen wird.

Zusammenfassend lässt sich sagen, dass ein robuster Ansatz mit SetReadDeadline(), Read() und Handlingtimeouts es Ihnen ermöglicht, TCP-Verbindungsschließungen im Netzpaket von Go zuverlässig zu erkennen.

Das obige ist der detaillierte Inhalt vonWie kann ich das Schließen einer TCP-Verbindung in Go zuverlässig erkennen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn