# Lettura non bloccante

**URL:** <https://www.ruby-forum.com/t/lettura-non-bloccante/59458>\
**Category:** IT\
**Created:** [May 3, 2006, 7:07pm UTC](https://www.ruby-forum.com/t/lettura-non-bloccante/59458 "2006-05-03T19:07:14Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![uncino](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/u/8491ac/32.png) [@uncino](https://www.ruby-forum.com/u/uncino)\
**Post date:** [May 3, 2006, 7:07pm UTC](https://www.ruby-forum.com/t/lettura-non-bloccante/59458/1 "2006-05-03T19:07:14Z")

</div>

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 ?

---

<div class="post-metadata">

**Author:** ![uncino](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/u/8491ac/32.png) [@uncino](https://www.ruby-forum.com/u/uncino)\
**Post date:** [May 3, 2006, 7:07pm UTC](https://www.ruby-forum.com/t/lettura-non-bloccante/59458/2 "2006-05-03T19:07:15Z")

</div>

— Federico G. [removed\_email\_address@domain.invalid](mailto: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](http://riffraff.blogsome.com)

* * *

Yahoo! Messenger with Voice: chiama da PC a telefono a tariffe esclusive

> **[Yahoo | Mail, Weather, Search, Politics, News, Finance, Sports & Videos](https://www.yahoo.com/)**
>
> Latest news coverage, email, free stock quotes, live scores and video are just the beginning. Discover more every day at Yahoo!

---

<div class="post-metadata">

**Author:** ![uncino](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/u/8491ac/32.png) [@uncino](https://www.ruby-forum.com/u/uncino)\
**Post date:** [May 3, 2006, 7:07pm UTC](https://www.ruby-forum.com/t/lettura-non-bloccante/59458/3 "2006-05-03T19:07:16Z")

</div>

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 ?

---

<div class="post-metadata">

**Author:** ![uncino](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/u/8491ac/32.png) [@uncino](https://www.ruby-forum.com/u/uncino)\
**Post date:** [May 3, 2006, 7:08pm UTC](https://www.ruby-forum.com/t/lettura-non-bloccante/59458/4 "2006-05-03T19:08:06Z")

</div>

— Federico G. [removed\_email\_address@domain.invalid](mailto: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](http://riffraff.blogsome.com)

* * *

Yahoo! Mail: gratis 1GB per i messaggi e allegati da 10MB  
[http://mail.yahoo.it](http://mail.yahoo.it)

---

<div class="post-metadata">

**Author:** ![uncino](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/u/8491ac/32.png) [@uncino](https://www.ruby-forum.com/u/uncino)\
**Post date:** [May 3, 2006, 7:08pm UTC](https://www.ruby-forum.com/t/lettura-non-bloccante/59458/5 "2006-05-03T19:08:09Z")

</div>

> 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…)
