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



## SuperCed (8 Octobre 2010)

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 :

```
/ 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 :

```
std::string testMsg( "test" );
send( comSocket, testMsg.c_str(), testMsg.length(), 0 );
```

et en face :

```
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!


----------



## SuperCed (11 Octobre 2010)

En fait, c'était un autre problème dans le code. C'est résolu.


----------

