Leggere da socket

Salve ragazzi devo sostenere un’esame di reti di calcolatori e volevo un consiglio su come leggere da socket. Allora ho letto che con la read e la write può capitare che vengono letti meno byte di quelli richiesti, io ho optato per una soluzione di questo tipo:


    while ( (n = read(socketfd, bufferIn, 1024)) > 0) {

        bufferIn[n] = 0;

        if (fputs(bufferIn, stdout) == EOF) {
            fprintf(stderr,"fputs error\n");
            exit(1);
        }

    }

poi ci sono delle funzioni fullread e fullwrite che reiterano opportunamente il processo…

Secondo voi per leggere e scrivere in una socket diciamo in modo corretto e senza complicarmi troppo la vita come potrei fare???

Grazie mille per una vostra eventuale risposta.

Ciao, da una prima occhiata a me sembra che funzioni tutto se iterato correttamente quindi, sinceramente, non ho ben capito la domanda :slight_smile:
Perché inoltre dici che la read legge meno byte di quelli richiesti?

La read può tornare meno byte di quelli richiesti. Se tu fai una lettura da 1024 byte, ma ci sono solo 800byte da leggere non puoi tenere bloccata la read finché non vengono inventati altri 224byte; semplicemetne ne vengono ritornati 800, se poi questo è un errore o altro, sta a chi ha invocato la read capirlo.

Chiarissimo. Avevo male interpretato il primo post.

anche io avevo capito il quesito come inteso da Wardialer, cioè che la read si comportava in maniera “anomala” e per questo Th3w4ll aveva pensato al codice, che ha postato, per recuperare i byte “persi”.
il senso indicato dall’ottimo Fenomeno scioglie i nostri dubbi.

Grazie delle risposte ragazzi…fenomeno ha colto correttamente il senso…
Ragazzi ho un altro dubbio…
due processi (server e client) per effettuare una corretta comunicazione mediante socket devono sempre conoscere la lunghezza del messaggio che andranno a ricevere?

Ciao

Dipende, se hai una connessione UDP devi fare quasi tutto tu e quindi devi conoscere tutto di quello che stai facendo.
Le connessioni TCP sono invece molto più comode e ti forniscono il pacchetto su di un piatto d’argento, ovviamente il prezzo da pagare è una maggiore complessità ed una minore velocità.

[postedit]
Se vuoi farti una cultura non posso che consigliarti la lettura di http://gapil.gnulinux.it/download/ e della sua corposa sezione di programmazione con i socket.
[/postedit]

Ciao Ciao, Moreno