Heim >Backend-Entwicklung >Golang >Wie erkennt man zuverlässig das Schließen einer TCP-Verbindung im „net'-Paket von Go?
Bei TCP-Servern ist es entscheidend, festzustellen, wann Clients Verbindungen geschlossen haben. In diesem Artikel wird untersucht, wie dies im Netzpaket effektiv erkannt werden kann.
Der in der Frage vorgeschlagene Ansatz, der auf Lese- oder Schreibvorgängen mit Fehlerprüfung basiert, wird nicht empfohlen. Stattdessen besteht eine zuverlässigere Methode darin, Lesefristen festzulegen und auf bestimmte Fehlerbedingungen zu prüfen.
Empfohlener Ansatz:
Der folgende Codeausschnitt stammt aus der „Best way um zuverlässig zu erkennen, dass eine TCP-Verbindung geschlossen ist“-Thread, demonstriert das Empfohlene Ansatz:
one := make([]byte, 1) c.SetReadDeadline(time.Now()) if _, err := c.Read(one); err == io.EOF { l.Printf(logger.LevelDebug, "%s detected closed LAN connection", id) c.Close() c = nil } else { var zero time.Time c.SetReadDeadline(time.Now().Add(10 * time.Millisecond)) }
Erklärung:
Timeout-Erkennung:
Für die Timeout-Erkennung kann der folgende Code verwendet werden verwendet:
if neterr, ok := err.(net.Error); ok & neterr.Timeout() { ... }
Dies prüft, ob der Fehler ein net.Error ist, der zusätzliche Informationen wie Timeout() enthält.
Updates:
In Go 1.7 und höher werden Null-Byte-Lesevorgänge sofort ohne Fehler zurückgegeben. Daher wird empfohlen, mindestens ein Byte zu lesen.
Das obige ist der detaillierte Inhalt vonWie erkennt man zuverlässig das Schließen einer TCP-Verbindung im „net'-Paket von Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!