|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Mar 2005
Messaggi: 1653
|
[C] Socket: come ritardarne opportunamente la chiusura?
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
__________________
gica78r@ncc-1701:~$ tar -c tar: Codardamente mi rifiuto di creare un archivio vuoto |
|
|
|
|
|
#2 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
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... |
|
|
|
|
|
#3 | |
|
Senior Member
Iscritto dal: Mar 2005
Messaggi: 1653
|
Quote:
C'e' di mezzo l' I/O multiplexing, vero? Non l'ho ancora fatto, speravo tanto di saltarlo Grazie
__________________
gica78r@ncc-1701:~$ tar -c tar: Codardamente mi rifiuto di creare un archivio vuoto |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 05:22.











C'e' di mezzo l' I/O multiplexing, vero? Non l'ho ancora fatto, speravo tanto di saltarlo








