Gica78R
22-09-2005, 17:38
Salve,
ho scritto una stupidissima funzione che apre un file di testo in lettura e lo invia, carattere per carattere, attraverso un socket (connesso) all'altro capo del quale c'e' un browser.
Anche se server (il programma che fa uso della suddetta funzione) e browser si trovano sulla stessa macchina, ho notato che molto spesso il file non viene ricevuto nella sua interezza. Ritengo che cio' sia dovuto al fatto che, una volta che il server ha letto tutti i caratteri del file e li ha scritti (uno per uno) sul socket, questo termini (anche perche' null'altro deve fare), chiudendo tutti i file descriptors (socket compresi, ovviamente).
Se, prima della chiusura del socket da parte del server, inserisco un loop per ritardare un po' l'esecuzione, il file viene ricevuto per intero dal browser.
Al momento sto usando le classiche funzioni che operano sui socket, quindi write, send, read, recv, ecc.
Sapreste dirmi se c'e' modo di sapere se il processo che sta all'altro capo del socket ha completato la lettura di tutti i dati inviatigli, e quindi subordinare la chiusura del socket a tale condizione?
Grazie :)
ho scritto una stupidissima funzione che apre un file di testo in lettura e lo invia, carattere per carattere, attraverso un socket (connesso) all'altro capo del quale c'e' un browser.
Anche se server (il programma che fa uso della suddetta funzione) e browser si trovano sulla stessa macchina, ho notato che molto spesso il file non viene ricevuto nella sua interezza. Ritengo che cio' sia dovuto al fatto che, una volta che il server ha letto tutti i caratteri del file e li ha scritti (uno per uno) sul socket, questo termini (anche perche' null'altro deve fare), chiudendo tutti i file descriptors (socket compresi, ovviamente).
Se, prima della chiusura del socket da parte del server, inserisco un loop per ritardare un po' l'esecuzione, il file viene ricevuto per intero dal browser.
Al momento sto usando le classiche funzioni che operano sui socket, quindi write, send, read, recv, ecc.
Sapreste dirmi se c'e' modo di sapere se il processo che sta all'altro capo del socket ha completato la lettura di tutti i dati inviatigli, e quindi subordinare la chiusura del socket a tale condizione?
Grazie :)