> il fatto che sia wi-fi è un dettaglio implementativo, fosse via cavetto 
> ethernet il discorso sarebbe esattamente lo stesso
> (scusa è che se no sembra che le socket abbiano a che fare esclusivamente con 
> le connessioni wi-fi quando invece sono un astrazione moolto più generale 
> generale)
si si, era solo per fare un esempio pratico di come ottengo il problema.

> venendo al tuo problema: non mi risulta che sia possibile, per risolvere un 
> problema simile costringevo il client a mandarmi un pachetto di acknowledge 
> entro tot secondi
> 
> in pratica il ruolo di tale pacchetto era esclusivamente quello di segnalare 
> "sono ancora vivo"
> 
> se il server non riceveva dati o acknowledge entro tot tempo assumeva che il 
> client fosse morto e chiudeva la socket
ci avevo pensato ma il problema è che il server rimane fermo su s.recv quando 
cade la connessione e quindi non posso fare altre comunicazioni...

Le soluzioni che mi vengono in mente in questo momento sono due:
1) fare un socket.accept prima di ogni socket.recv, in questo modo avrei 
maggiore probabilità di avere una connessione funzionante per il recv
2) mandare il comando socket.recv in un thread separato, e nel main controllo 
quanto tempo ci impiega. Se passano troppi secondi allora la connessione o è 
troppo lenta o è caduta e quindi posso "uccidere" il recv  e procedere con un 
nuovo socket.accept.

La prima soluzione potrebbe rallentare lo scambio dati e, anche se con minor 
probabilità, potrebbe presentare lo stesso problema iniziale. La seconda 
soluzione mi sembra un po' più generica ma non so se sia implementabile...

Forse il mio stupore è dovuto alla mia ignoranza, ma mi stupisce che pur 
settando un timeout finito il comando recv non va in timeout quando c'è una 
caduta improvvisa della connessione...
 
Grazie,
Simone
_______________________________________________
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python

Rispondere a