Je fais de la programmation socket depuis de nombreuses années, mais je n'ai jamais manqué un message utilisant TCP - jusqu'à maintenant. J'ai un serveur Java et un client en C - les deux sur le localhost. Ils envoient des messages brefs comme des ficelles, avec quelques retards entre les deux. J'ai un cas particulier où un message n'arrive jamais du côté du client. Il est reproductible, mais étrangement dépendant de la machine.Missed Socket Message
Pour donner plus de détails, je peux déboguer le côté serveur et voir l'envoi suivi du vidage. Je peux joindre au client et passer à travers les appels sélectionnés (en boucle) mais cela ne se manifeste jamais. Quelqu'un a-t-il expérimenté cela et y a-t-il une explication autre qu'une erreur de codage? En d'autres termes, si vous avez une socket connectée et que vous faites une écriture d'un côté et une lecture de l'autre, que peut-il se produire au milieu pour provoquer quelque chose comme ça?
Un autre détail - J'ai utilisé tcpdump sur l'interface de bouclage et je peux voir le message manqué.
Votre client est multithread? Est-il possible qu'un thread séparé soit également select() sur ce message? Aussi, quel système d'exploitation utilisez-vous? –
Je ne pense pas qu'il soit possible de sélectionner un autre thread. C'est sur Linux. Bonne idée cependant - j'ai vérifié avec un compteur. – AdamC