Heim > Backend-Entwicklung > Golang > Wie kann ich geschlossene TCP-Verbindungen im „net'-Paket von Go zuverlässig erkennen?

Wie kann ich geschlossene TCP-Verbindungen im „net'-Paket von Go zuverlässig erkennen?

Mary-Kate Olsen
Freigeben: 2024-12-24 10:39:28
Original
881 Leute haben es durchsucht

How Can I Reliably Detect Closed TCP Connections in Go's `net` Package?

Überwachen des TCP-Verbindungsstatus im Netzpaket

Eine häufige Aufgabe bei TCP-Serverimplementierungen besteht darin, festzustellen, wann eine Clientverbindung geschlossen wurde. Diese Frage untersucht eine zuverlässige Methode zum Erkennen von Verbindungsabschlüssen im Go-Net-Paket.

Überprüfung auf geschlossene Verbindungen

Der empfohlene Ansatz besteht darin, sowohl einen Lese- als auch einen Schreibvorgang zu versuchen und prüfen Sie, ob einer der beiden einen Nullfehler zurückgibt. Wenn beide Vorgänge erfolgreich sind, wird davon ausgegangen, dass die Verbindung geöffnet ist. Allerdings weist diese Methode Einschränkungen auf.

Zuverlässige Erkennung mithilfe von Zeitüberschreitungen

Eine zuverlässigere Lösung besteht darin, eine Lesefrist festzulegen und einen Ein-Byte-Leseversuch zu unternehmen. Wenn der Lesevorgang mit einem io.EOF-Fehler abgeschlossen wird, gilt die Verbindung als geschlossen. Um Fehlalarme aufgrund langsamer Clients zu verhindern, kann eine Lesefrist ungleich Null festgelegt werden.

one := make([]byte, 1)
c.SetReadDeadline(time.Now())
if _, err := c.Read(one); err == io.EOF {
  // Connection closed
}
Nach dem Login kopieren

Timeout-Erkennung

Wenn die Lesezeitüberschreitung abläuft, wird die angegebene Frist angezeigt error implementiert die Schnittstelle net.Error und die Timeout()-Methode des Fehlers kann zur Überprüfung verwendet werden Ursache.

if neterr, ok := err.(net.Error); ok && neterr.Timeout() {
  // Connection timed out
}
Nach dem Login kopieren

Überlegungen zu Go 1.7

In Go 1.7 werden Null-Byte-Lesevorgänge sofort ohne Fehler zurückgegeben. Daher ist es wichtig sicherzustellen, dass mindestens ein Byte gelesen wird, um Fehlalarme zu vermeiden.

Das obige ist der detaillierte Inhalt vonWie kann ich geschlossene TCP-Verbindungen im „net'-Paket von Go zuverlässig erkennen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage