[SOCKET TCP C] Problème de perfs sur envoi de petits paquets

SuperCed

Membre expert
Club iGen
20 Juin 2001
1 333
70
45
superced.rb38.eu
Bonjour,

nous développons un petit programme client/serveur qui permet de répliquer des fichiers sur différents serveurs.

Nous avons un dialogue entre clients et serveurs. Cependant, nous nous apercevons que les transferts sont très lent lorsque les messages sont de petites tailles. Tout est fonctionnel, mais nous souhaitons accélérer les perfs.

Après avoir cherché un peu sur le net, nous avons vu que les socket TCP utilisait l'algorithme de Nagle pour envoyer les paquet. D'après ce que j'ai pu comprendre, TCP attend qu'un certain nombre de données soient dispo avant de les envoyer sur le réseau. Au bout d'un certain temps, TCP envoie quand même le paquet, même s'il est petit.
Cependant ceci nous ralenti les perfs, nous aimerions envoyer directement le message sans attente.

Pour cela, nous avons trouvé le code suivant :
Bloc de code:
/ Disable/Enable the Nagle (TCP No Delay) algorithm.
int flag = ( disable ? 1 : 0 );
if ( SOCKET_ERROR == setsockopt( comSocket, IPPROTO_TCP, TCP_NODELAY, (char *)&flag, sizeof( flag ) ) ) {
            // ERROR...
}

Malheureusement, ceci ne semble avoir aucun impact sur les envois de messages...

Voici le code :
Bloc de code:
std::string testMsg( "test" );
send( comSocket, testMsg.c_str(), testMsg.length(), 0 );

et en face :
Bloc de code:
char* buffer = new char[ 256 ];
recv( socket, buffer, sizeof buffer, 0 );

Pensez-vous qu'il nous manque une option ? Ou peut être qu'on fait mal quelque chose? Comment peut-on augmenter la vitesse des transferts sur les petits paquets?

Merci!
 
  • J’aime
Réactions: p4bl0