Bienvenue, Invité. Merci de vous connecter ou de vous inscrire.
Avez-vous perdu votre e-mail d'activation ?

Auteur Sujet: TcpSocket::send, arrivée garantie ?  (Lu 2378 fois)

0 Membres et 1 Invité sur ce sujet

janf

  • Newbie
  • *
  • Messages: 45
    • Voir le profil
TcpSocket::send, arrivée garantie ?
« le: Avril 28, 2016, 12:25:18 am »
Bonjour, j'ai une toute petite question sur le réseau.

Sur un sf::TcpSocket, quand la fonction send (surchargée avec sf::Packet) renvoi le statut "Done", cela veut dire que le paquet a bien été envoyé, mais ça ne garantie pas qu'il soit bien arrivé au destinataire, si ?


Maghin

  • Newbie
  • *
  • Messages: 1
    • Voir le profil
Re : TcpSocket::send, arrivée garantie ?
« Réponse #1 le: Mai 01, 2016, 01:51:48 pm »
Bonjour,

Le Status Done est renvoyé une fois que toute les données demandées à être envoyée ont été traitées par SFML localement.

Que le TcpSocket soit bloquant ou non dans les deux cas un Status::Done SFML indique bien que la donnée est partie sur le socket.
La donnée est donc envoyé sur le socket TCP qui "relie" les deux hôtes, et donc à l'instant T on peut avoir un Status::Done sur l'expéditeur, alors que le destinataire n'a lui pas encore fait appel à la fonction receive de SFML. La donnée est en quelque sorte en attente sur la couche 4 du modèle OSI du destinataire (celle qui gère TCP/UDP/etc..) et attend d'être récupérée, c'est le dernier contrôle à être effectué. Pour avoir un contrôle supplémentaire il faut implémenter un protocole de niveau supérieur.

Pour résumer on peut être sûr que la donnée ait bien été envoyée au destinataire (elle a bien traversé le câble), mais pas qu'elle ait encore été traitée par SFML en face..


janf

  • Newbie
  • *
  • Messages: 45
    • Voir le profil
Re : TcpSocket::send, arrivée garantie ?
« Réponse #2 le: Mai 08, 2016, 09:20:32 pm »
Je te remercie beaucoup pour ta réponse très détaillée.

Lorsque je parlais de paquet arrivé au destinataire, je voulais dire arrivé jusqu'à sa machine, pas forcément déjà lu avec la fonction receive.

Je lis que le protocole TCP garanti la réception et l'ordre des paquets, mais disons que je ne sais pas à quel point je dois lui faire confiance. Je ne sais pas à quel point il est intriqué avec les fonctions de la SFML, et si un statut 'Done' lors de l'envoi signifie que TCP a reçu son accusé de réception. J'imagine que ça veut dire seulement que la fonction s'est bien déroulée en ce qui concerne l'envoi. Le code source pourrait peut-être m'en dire plus, mais j'imagine qu'il faudrait que j'aille voir jusque dans les sources des API de sockets utilisées par SFML.

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : TcpSocket::send, arrivée garantie ?
« Réponse #3 le: Mai 08, 2016, 09:28:49 pm »
Citer
Le code source pourrait peut-être m'en dire plus
Non. Même moi je ne saurais répondre à cette question, il va te falloir de la documentation un peu plus bas niveau concernant TCP et les sockets pour y apporter une réponse fiable.
Laurent Gomila - SFML developer