Forum: Italian Ruby user group Lettura non bloccante.

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Federico G. (Guest)
on 2006-05-03 21:07
(Received via mailing list)
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.

Qualcuno sa aiutarmi ?
gabriele renzi (Guest)
on 2006-05-03 21:07
(Received via mailing list)
--- Federico G. <removed_email_address@domain.invalid> ha
scritto:

> Qualcuno sa aiutarmi ?
require 'timeout'
:)
Alternativamente avvia un altro thread, i Thread non
vengono bloccati in quanto ruby sotto sotto usa
select() sugli stream.

--
icq:  #69488917
blog: http://riffraff.blogsome.com



___________________________________
Yahoo! Messenger with Voice: chiama da PC a telefono a tariffe esclusive
http://it.messenger.yahoo.com
Federico G. (Guest)
on 2006-05-03 21:07
(Received via mailing list)
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 ?
gabriele renzi (Guest)
on 2006-05-03 21:08
(Received via mailing list)
--- Federico G. <removed_email_address@domain.invalid> ha
scritto:


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

rescue Timeoutcomesichiama

--
icq:  #69488917
blog: http://riffraff.blogsome.com






___________________________________
Yahoo! Mail: gratis 1GB per i messaggi e allegati da 10MB
http://mail.yahoo.it
Massimiliano M. (Guest)
on 2006-05-03 21:08
(Received via mailing list)
> 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 topic is locked and can not be replied to.