Eccomi di nuovo qui con un altra incredibile domanda:
ogni metodo di lettura che ho provato per leggere da un socket tcp
risulta bloccante ma io devo aspettare in lettura solo X secondi
trascorsi i quali se non ho ancora letto niente devo mandare un
controllo di connessione attiva.
Molto bello il timeout, peccato che non l’abbia conosciuto prima …
Piccola domandina quasi trascurabile, speravo di rimandare l’argomento
(sono ancora molto newbe) ma se il tempo che imposto trascorre prima
che l’operazione venga conclusa ottengo un non molto bello execution
expired (Timeout::Error)
come posso evitarlo (e anzi fargli fare qualche altra cosa) ?
Da quello che ho visto penso di dover usare rescue, confermate ?
Da quello che ho visto penso di dover usare rescue,
confermate ?
esatto, quando viene sollevata uin’eccezione tu la
acchaippi con rescue e vedi se puoi fare
qualcos’altro. Ovviamente magari ci sono eccezioni che
non vuoi recuperare, quindi fai attenzione ad usare un
argiomento per la clausola rescue:
Molto bello il timeout, peccato che non l’abbia conosciuto prima …
Piccola domandina quasi trascurabile, speravo di rimandare l’argomento
(sono ancora molto newbe) ma se il tempo che imposto trascorre prima
che l’operazione venga conclusa ottengo un non molto bello execution
expired (Timeout::Error)
come posso evitarlo (e anzi fargli fare qualche altra cosa) ?
Da quello che ho visto penso di dover usare rescue, confermate ?
Prova con qualcosa come:
begin
Timeout::timeout(5) { data = sock.read(…) }
use(data)
rescue Timeout::Error
retry if connection_alive?
end
(“use” e “connection_alive?” sono pseudocodice…)
This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.