Maison >développement back-end >Golang >Comment puis-je détecter la fermeture de la connexion TCP dans le package « net » de Go ?

Comment puis-je détecter la fermeture de la connexion TCP dans le package « net » de Go ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-16 21:52:15650parcourir

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

Comment déterminer la fermeture d'une connexion TCP à l'aide du package Net

Problème :

Lors de la mise en œuvre un serveur TCP, il est essentiel de savoir quand les clients ferment leurs connexions. Comment pouvez-vous déterminer cela à l'aide du package net ?

Réponse :

Pour détecter une connexion TCP fermée, vous pouvez utiliser la méthode suivante :

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

Cette approche implique :

  1. Créer un tampon sur un octet (un).
  2. Définition d'un délai de lecture sur la connexion (c) à l'heure actuelle pour forcer une lecture immédiate.
  3. Lecture d'un octet de la connexion.
  4. Vérification l'erreur ; s'il s'agit de io.EOF, la connexion est fermée.

Détection du délai d'attente :

Pour détecter un délai d'attente, vous pouvez vérifier si l'erreur est un réseau. Erreur avec un délai d'attente.

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

Mise à jour (Go 1.7 ):

Dans Go 1.7, les lectures de zéro octet reviennent immédiatement et n'entraînent jamais d'erreur. Pour en tenir compte, il faut lire au moins un octet.

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!

Déclaration:
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