Salve a tutti.
Io mi ritrovo ad avere un vettore di char molto grosso, diciamo anche oltre il milione di elementi.
Quello che voglio fare è inviare l'intero contenuto del vettore tramite socket ad un'applicazione client.
quello che faccio è suddividere il vettore in mini-vettori da 8192 caratteri, e poi fare una send per ogni blocco.
Codice PHP:
long int totale = 0;
char vettore_grande[1000000];
char vettore_mini[8192];
int i;
while(totale<1000000){
for(i=0;i<8192;i++){
vettore_mini[i] = vettore_grande[totale];
totale++;
}
send(s,vettore_mini,8192,0);
}
lasciate perdere il fatto che l'ultimo pacchetto potrebbe non essere un multiplo di 8192, ho già fatto il controllo solo non lo riporto per non appesantire qua.
L'invio funziona anche benissimo perchè effettivamente facendo un conteggio dei byte inviati alla fine ottengo esattamente 1000000.
Il problema è alla ricezione:
Codice PHP:
char vettore_mini[8192];
int conta;
case FD_READ:
conta = recv(s,vettore_mini,8192,0);
tralascio la parte di codice in cui man mano ricopio il contenuto di vettore mini all'interno di un vettore più grande (inverso del caso sopra). Quello che importa è che contando il numero di byte totali ricevuti (sommando in una variabile globale dopo ogni recv il valore di conta) non arrivo mai ad 1000000; a volte si ferma a 750000 circa, a volte a 800000 circa ma non riceve mai tutti i byte inviati.
A cosa è dovuto questo? io sulla recv non ho nessuna condizione di terminazione, cioè in pratica per ogni send la recv dovrebbe comunque essere attivata.
Grazie mille per le risposte in anticipo