|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Feb 2006
Città: Torino
Messaggi: 1644
|
[C] Svuotare la memoria del socket
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? |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Aug 2005
Messaggi: 2755
|
ti consiglio di usare un carattere terminatore, poi cicla finche non trovi quel carattere o finche il buffer non è vuoto
ciao
__________________
|
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Oct 2005
Città: Genova
Messaggi: 937
|
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
__________________
MacMini Late 2009/MacMini 2018 |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 21:22.