Heim > Backend-Entwicklung > Golang > Wie kann ich das Schließen einer TCP-Verbindung im „net'-Paket von Go erkennen?

Wie kann ich das Schließen einer TCP-Verbindung im „net'-Paket von Go erkennen?

Susan Sarandon
Freigeben: 2024-12-16 21:52:15
Original
647 Leute haben es durchsucht

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

So ermitteln Sie den TCP-Verbindungsschluss mithilfe des Net-Pakets

Problem:

Bei der Implementierung Bei einem TCP-Server ist es wichtig zu wissen, wann Clients ihre Verbindungen schließen. Wie können Sie dies anhand des Net-Pakets ermitteln?

Antwort:

Um eine geschlossene TCP-Verbindung zu erkennen, können Sie die folgende Methode verwenden:

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

Dieser Ansatz umfasst:

  1. Erstellen eines Einzelbyte-Puffers (eins).
  2. Festlegen einer Lesefrist für die Verbindung (c) auf die aktuelle Zeit, um ein sofortiges Lesen zu erzwingen.
  3. Lesen eines Bytes aus der Verbindung.
  4. Überprüfung der Fehler; wenn es io.EOF ist, wurde die Verbindung geschlossen.

Timeout-Erkennung:

Um ein Timeout zu erkennen, können Sie prüfen, ob es sich bei dem Fehler um ein Netz handelt. Fehler mit Zeitüberschreitung.

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

Update (Go 1.7 ):

In Go 1.7 werden Null-Byte-Lesevorgänge sofort zurückgegeben und führen nie zu einem Fehler. Um dies zu berücksichtigen, muss mindestens ein Byte gelesen werden.

Das obige ist der detaillierte Inhalt vonWie kann ich das Schließen einer TCP-Verbindung im „net'-Paket von Go 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