Comment créer un tampon pour lire les données de socket en C

Utilisation de la programmation de socket C / C ++ et de la méthode “read (socket, buffer, BUFSIZE)”. En quoi consiste exactement le “tampon”? Je sais que char et octet sont la même chose, mais le nombre d’éléments contenus dans le tableau d’octets est-il important? Le tampon doit-il pouvoir contenir tout le message jusqu’au caractère nul?

BUFSIZE doit être égal à la taille de votre tampon en octets. read () arrête la lecture lorsque le tampon est plein. Voici un exemple:

#define MY_BUFFER_SIZE 1024 char mybuffer[MY_BUFFER_SIZE]; int nBytes = read(sck, mybuffer, MY_BUFFER_SIZE); 

Comme toujours, utilisez sizeof quand vous en avez la chance. À l’aide de l’opérateur intégré sizeof , vous demandez au compilateur de calculer la taille d’une variable plutôt que de la spécifier vous-même. Cela réduit le risque d’introduction de bogues lorsque la taille de la variable réelle est différente de ce que vous pensez.

Donc, au lieu de faire

 #define BUFSIZE 1500 char buffer[BUFSIZE]; int n = read(sock, buffer, BUFSIZE); 

vous devriez vraiment utiliser

 char buffer[1500]; int n = read(sock, buffer, sizeof buffer); 

Notez que vous n’avez pas besoin de parenthèses autour de l’argument de sizeof, à moins que l’argument ne soit le nom d’un type.

L’implémentation de vos sockets n’exige pas que le tampon, pour être assez grand, conserve tout le message à coup sûr, mais cela peut être pratique selon ce que vous faites.