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
Susan SarandonOriginal
2024-12-16 21:52:15657Durchsuche

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
}

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
}

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!

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