Ha bah voila, la réponse est dans ce ticket, la fonction receive ne reçoit que la 1ère partie du paquet TCP en mode non bloquant et puis renvoie Socket::NotReady.
Donc pas besoin que je reposte un code minimal et que je refasse des tests, le bug vient bien de la SFML qui en mode non bloquant en TCP ne reçois pas tout le message avant de renvoyer Socket::NotReady.
Bref c'est ce que j'ai compris en lisant les commentaires sur ce ticket.
Ok donc du coup je suis obligé de limiter la taille des paquets à envoyer.
Ou alors c'est un bug des sockets de Berkeley plutot, bref...
Et bon je fais exactement comme eux on fait, plusieurs appels à la fonction send pour envoyer le message.
Mes tests sont exactements pareils aux leurs, je ne vais pas reposter ce que eux ont déja poster.
Et bon cette fois j'ai fais des tests avant de venir chouiner.
Contrairement à mon dernier poste ou, bah, il fallait simplement que je prédise la position suivante par rapport au moment au le client reçoit les données et non par rapport au moment ou il les envoie, bien que normalement ça ne devait rien changer.
Bref je comprends mieux d'ou venaient tout ces bugs maintenant.