Aucune donnée n'est envoyée sur le réseau pour maintenir les connexions TCP. Vous pouvez envoyer une couche réseau keep-alive simplement en envoyant un paquet de zéro octet à partir d'une paire d'options peer ou enable socket pour que le système d'exploitation les envoie périodiquement pour vous. À mon avis, la couche d'application keep-alives (votre protocole d'application la gère) offre une meilleure conception/fiabilité que la couche de transport machinary. Lors de la définition de protocoles d'application en couches sur TCP pour une fiabilité maximale, il est généralement nécessaire d'incorporer un type de NOOP (non-operation), ping, heartbeat dans la conception du protocole. Ceci est très important car, par exemple, si votre serveur écoute une requête d'un client et que le client est éteint après la connexion, la session TCP est essentiellement orpheline et votre serveur peut finir par l'écouter pour toujours. L'interruption de connexion ne peut être détectée si aucune donnée n'est envoyée ou reçue !! Si le serveur envoie au moins noop/ping/heartbeats à intervalles réguliers, la requête sortante déclenchera la machine TCP retrans/timeout machinary et le serveur pourra alors détecter la connexion morte. Si à la place votre application envoie une couche d'application "ping" ou "salut, comment allez-vous?" message vous pouvez aller plus loin et l'utiliser pour vous renseigner sur l'état de votre peer plutôt que simplement la connexion sous-jacente. Par exemple, si un homologue est bloqué dans une boucle infinie ou si ses lecteurs de disque sont en feu, les keepalives TCP seuls ne vous aident pas à comprendre et à corriger le problème sous-jacent.
Avez-vous besoin de savoir pour une tâche de programmation? Sinon, il est mieux adapté à serverfault.com –
m .. il est lié à C++, boost :: asio, être particulier – roma