[Python] Socket

Simone Ziraldo simone.ziraldo a gmail.com
Ven 15 Lug 2011 08:37:19 CEST


> 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


Maggiori informazioni sulla lista Python