# How can an I use nonblocking I/O with openssl?

**URL:** <https://www.ruby-forum.com/t/how-can-an-i-use-nonblocking-i-o-with-openssl/159661>\
**Category:** Ruby\
**Created:** [February 6, 2009, 7:45pm UTC](https://www.ruby-forum.com/t/how-can-an-i-use-nonblocking-i-o-with-openssl/159661 "2009-02-06T19:45:44Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![yaxm](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/y/54ee81/32.png) [@yaxm](https://www.ruby-forum.com/u/yaxm)\
**Post date:** [February 6, 2009, 7:45pm UTC](https://www.ruby-forum.com/t/how-can-an-i-use-nonblocking-i-o-with-openssl/159661/1 "2009-02-06T19:45:44Z")

</div>

hello,  
I am using ruby’s imap library to connect to gmail via ssl.  
But every now and then, my thread goes into sleep and never wakes up.  
I suspect that the thread is waiting for I/O for reading.

how can I make openssl use nonblocking i/o?

here’s another thread discussed about similar issue:  
[http://www.ruby-forum.com/topic/70716](http://www.ruby-forum.com/topic/70716)

Thanks.  
Yaxm

---

<div class="post-metadata">

**Author:** ![yaxm](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/y/54ee81/32.png) [@yaxm](https://www.ruby-forum.com/u/yaxm)\
**Post date:** [February 6, 2009, 7:50pm UTC](https://www.ruby-forum.com/t/how-can-an-i-use-nonblocking-i-o-with-openssl/159661/2 "2009-02-06T19:50:37Z")

</div>

On Fri, Feb 6, 2009 at 11:45 AM, Yaxm Y.  
\<removed\_email\_address@domain.invalid[removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)

> wrote:

> hello,  
> I am using ruby’s imap library to connect to gmail via ssl.  
> But every now and then, my thread goes into sleep and never wakes up.  
> I suspect that the thread is waiting for I/O for reading.
> 
> how can I make openssl use nonblocking i/o?

In my event library Rev ([http://rev.rubyforge.org](http://rev.rubyforge.org)) I ended up  
effectively  
monkeypatching the C code in the Ruby OpenSSL extension in order to  
support  
non-blocking I/O:

[http://github.com/tarcieri/rev/blob/5f76c67996fd9076503072cf569ad935423e9d56/ext/rev/rev\_ssl.c](http://github.com/tarcieri/rev/blob/5f76c67996fd9076503072cf569ad935423e9d56/ext/rev/rev_ssl.c)

I for one would certainly appreciate a “real” solution to doing  
non-blocking  
SSL.

---

<div class="post-metadata">

**Author:** ![yaxm](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/y/54ee81/32.png) [@yaxm](https://www.ruby-forum.com/u/yaxm)\
**Post date:** [February 6, 2009, 10:36pm UTC](https://www.ruby-forum.com/t/how-can-an-i-use-nonblocking-i-o-with-openssl/159661/3 "2009-02-06T22:36:45Z")

</div>

On Fri, Feb 6, 2009 at 11:50 AM, Tony A. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> I for one would certainly appreciate a “real” solution to doing  
> non-blocking SSL.

If there’s interest I can release Rev’s nonblocking SSL support as a  
self-contained Gem which monkeypatches connect\_nonblock,  
accept\_nonblock,  
read\_nonblock, and write\_nonblock methods into OpenSSL::SSL::Socket.

---

<div class="post-metadata">

**Author:** ![yaxm](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/y/54ee81/32.png) [@yaxm](https://www.ruby-forum.com/u/yaxm)\
**Post date:** [February 7, 2009, 6:00am UTC](https://www.ruby-forum.com/t/how-can-an-i-use-nonblocking-i-o-with-openssl/159661/4 "2009-02-07T06:00:45Z")

</div>

I am very interested in as I need IMAP ssl to use non-blocking i/o.

Tony A. wrote:

> On Fri, Feb 6, 2009 at 11:50 AM, Tony A. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:
> 
> > I for one would certainly appreciate a “real” solution to doing  
> > non-blocking SSL.
> 
> If there’s interest I can release Rev’s nonblocking SSL support as a  
> self-contained Gem which monkeypatches connect\_nonblock,  
> accept\_nonblock,  
> read\_nonblock, and write\_nonblock methods into OpenSSL::SSL::Socket.

---

<div class="post-metadata">

**Author:** ![yaxm](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/y/54ee81/32.png) [@yaxm](https://www.ruby-forum.com/u/yaxm)\
**Post date:** [February 7, 2009, 7:53am UTC](https://www.ruby-forum.com/t/how-can-an-i-use-nonblocking-i-o-with-openssl/159661/5 "2009-02-07T07:53:38Z")

</div>

On Fri, Feb 6, 2009 at 10:00 PM, Yaxm Y.  
\<removed\_email\_address@domain.invalid[removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)

> wrote:

> I am very interested in as I need IMAP ssl to use non-blocking i/o.

All right, well I released non-blocking OpenSSL support as a gem.

github repo here:

> **[GitHub - tarcieri/openssl-nonblock: Non-blocking I/O support for Ruby OpenSSL](https://github.com/tarcieri/openssl-nonblock/tree/master)**
>
> master

release announcement here:  
[http://www.nabble.com/-ANN--openssl-nonblock-0.1.0-to21885626.html](http://www.nabble.com/-ANN--openssl-nonblock-0.1.0-to21885626.html)

And now installable as “gem install openssl-nonblock”

Let me know if it works out for you.
