Quand j'envoie()/write() un message sur un flux tcp, comment puis-je savoir si ces octets ont été livrés avec succès?Déterminer si un message sur tcp a été livré
Le destinataire accuse réception des octets via tcp, de sorte que la pile tcp de l'expéditeur doit en être informée. Mais quand j'envoie() quelques octets, send() retourne immédiatement, même si le paquet n'a pas pu (encore) être livré, je l'ai testé sous Linux 2.6.30 en utilisant strace sur netcat, en tirant mon câble réseau avant envoyer des octets.
Je suis juste en train de développer une application où il est très important de savoir si un message a été livré, mais l'implémentation des fonctionnalités tcp ("ack pour le message # 123") est maladroite, il doit y avoir un meilleur moyen.
Les faits sont corrects, mais je n'aime pas le phrasé. TCP est un protocole fiable, vous en entendrez parler ** si la transmission échoue. Le fait que vous n'avez pas besoin de demander un ACK du côté distant est une fonctionnalité, pas un bug. La "meilleure" façon de gérer cela est d'ignorer le problème au niveau des appels système et des octets. Si vous avez besoin d'un résultat, faites-le au niveau du protocole, pas au niveau des sockets. –