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
Libérer: 2024-12-16 21:52:15
original
649 Les gens l'ont consulté

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
}
Copier après la connexion

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
}
Copier après la connexion

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!

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