PDA

View Full Version : [C] Socket: come ritardarne opportunamente la chiusura?


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 :)

71104
22-09-2005, 20:04
be', tra le notifiche dei socket mi pare ci sia quella di scrittura, che ti dice se è possibile scrivere sul socket; non so a cosa serva ma è probabile che serva a fare quello che dici tu (ti notifica quando il client ha finito di leggere e puoi di nuovo scrivere), quindi io mi informerei su quella. :)
per "notifica" io che sono abituato a Winsock2 intendo dire in pratica quelle che controlli con la funzione select...

Gica78R
22-09-2005, 20:18
be', tra le notifiche dei socket mi pare ci sia quella di scrittura, che ti dice se è possibile scrivere sul socket; non so a cosa serva ma è probabile che serva a fare quello che dici tu (ti notifica quando il client ha finito di leggere e puoi di nuovo scrivere), quindi io mi informerei su quella. :)
per "notifica" io che sono abituato a Winsock2 intendo dire in pratica quelle che controlli con la funzione select...
:wtf: C'e' di mezzo l' I/O multiplexing, vero? Non l'ho ancora fatto, speravo tanto di saltarlo :stordita:

Grazie