PDA

View Full Version : [C] Svuotare la memoria del socket


dj_ste
03-04-2006, 09:34
Vi spiego il mio problema: sto implementando un server concorrente che deve ricevere una riga di testo da un client remoto. il testo ricevuto deve essere memorizzato in una variabile, che ovviamente non può avere dimensione infinita. il fatto è che nella variabile vengono memorizzate tante lettere quante ce ne stanno e al successivo invio di caratteri la variabile "cattura" anche le precedenti lettere che non era riuscita ad immagazzinare.

c'è un modo per svuotare il socket di ascolto oppure di usare una Readline non bloccante?

wisher
03-04-2006, 18:35
ti consiglio di usare un carattere terminatore, poi cicla finche non trovi quel carattere o finche il buffer non è vuoto
ciao

mr_hyde
03-04-2006, 23:06
Altra possibilita': trametti una cosa del tipo

typedef struct packetTemplate
{
unsigned char length;
char* buffer; /* in realta' e' la stringa da trasmettere/ricevere */
} packetType;

(ovviamente fai la struttura packed)

Poi fai una recv di 1 byte per leggere length e quindi una recv per ricevere "length" byte.

In questo piccolo esempio ovviamente puoi trasmettere stringhe di al max 255 byte. Per qualcosa di piu' grande devi cambiare il tipo di length in unsigned short o int e usare le funzioni di conversione per l'endianity.

Per il "non bloccante": se vuoi usare un socket non bloccante devi usare fcntl e O_NONBLOCK. E a seconda di cosa ti serve fare, usare "select" o "poll" per capire quando c'e' qualcosa a disposizione sul socket.

Ciao,
Mr Hyde