Maison > développement back-end > Golang > Comment puis-je détecter de manière fiable les connexions TCP fermées dans le package « net » de Go ?

Comment puis-je détecter de manière fiable les connexions TCP fermées dans le package « net » de Go ?

Mary-Kate Olsen
Libérer: 2024-12-24 10:39:28
original
832 Les gens l'ont consulté

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

Surveillance de l'état de la connexion TCP dans le package Net

Une tâche courante dans les implémentations de serveur TCP consiste à déterminer quand une connexion client a été fermée. Cette question explore une méthode fiable pour détecter les fermetures de connexion dans le package Go net.

Vérification des connexions fermées

L'approche suggérée consiste à tenter à la fois une opération de lecture et d'écriture. et vérifiez si l’un ou l’autre renvoie une erreur nulle. Si les deux opérations réussissent, la connexion est supposée ouverte. Cependant, cette méthode présente des limites.

Détection fiable à l'aide de délais d'attente

Une solution plus fiable consiste à définir une date limite de lecture et à tenter une lecture d'un octet. Si la lecture se termine par une erreur io.EOF, la connexion est considérée comme fermée. Pour éviter les faux positifs dus à des clients lents, un délai de lecture différent de zéro peut être défini.

one := make([]byte, 1)
c.SetReadDeadline(time.Now())
if _, err := c.Read(one); err == io.EOF {
  // Connection closed
}
Copier après la connexion

Détection du délai d'attente

Si le délai d'expiration de lecture expire, le L'erreur implémentera l'interface net.Error et la méthode Timeout() de l'erreur peut être utilisée pour vérifier le cause.

if neterr, ok := err.(net.Error); ok && neterr.Timeout() {
  // Connection timed out
}
Copier après la connexion

Considérations sur Go 1.7

Dans Go 1.7, les lectures de zéro octet reviennent immédiatement sans erreur. Par conséquent, il est crucial de s'assurer qu'au moins un octet est lu pour éviter les faux positifs.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal